I have wrote a simple video view renderer for android even though the video is not resize correctly but is showing video and the sound.
I tried a simple video view renderer for iOS. When I call play with the AVPlayer, but there is no error or video showing on the screen.
[assembly:ExportRenderer(typeof(VideoPlayer.VideoView), typeof(VideoViewRenderer))]
namespace VideoPlayer.iOS { public class VideoViewRenderer : ViewRenderer { public VideoViewRenderer() { }
protected override void OnElementChanged(ElementChangedEventArgs<VideoView> e)
{
base.OnElementChanged(e);
if (Control == null)
{
var player = new AVPlayer();
var playerLayer = AVPlayerLayer.FromPlayer(player);
playerLayer.BackgroundColor = new CoreGraphics.CGColor(1.0f, 1.0f, 1.0f);
playerLayer.Frame = new CoreGraphics.CGRect(0, 0, 300, 300);
NativeView.Layer.AddSublayer(playerLayer);
}
if (e.OldElement != null)
{
// Unsubscribe from event handlers and cleanup any resources
e.OldElement.StartHandler -= Start;
e.OldElement.StopHandler -= Stop;
}
if (e.NewElement != null)
{
e.NewElement.StartHandler += Start;
e.NewElement.StopHandler += Stop;
}
}
void Start(object sender, EventArgs e)
{
string file = Path.Combine(NSBundle.MainBundle.BundlePath, "demo.mp4");
//var url = new NSUrl("http://www.androidbegin.com/tutorial/AndroidCommercial.3gp");
var asset = AVAsset.FromUrl(new NSUrl(file));
var playerItem = new AVPlayerItem(asset);
var playerLayer = ((AVPlayerLayer)Layer.Sublayers[0]);
var player = playerLayer.Player;
player.ReplaceCurrentItemWithPlayerItem(playerItem);
//if (player.Rate > 0.0f)
// player.Rate = 0.0f;
player.Play();
}
void Stop(object sender, EventArgs e)
{
var player = ((AVPlayerLayer)NativeView.Layer.Sublayers[0]).Player;
player.Rate = 0.0f;
}
public override void LayoutSubviews()
{
base.LayoutSubviews();
}
}
}
Am I missing some permission or setup in the project.