Xamarin:无法在表格视图单元格中播放视频

时间:2016-09-13 09:46:49

标签: c# xamarin xamarin.ios avplayer video-player

Hello其他程序员,我目前正在使用我的TableViewSource代码:

public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
    var cell = (RFVideoTBC)tableView.DequeueReusableCell(RFVideoTBC.Identifier(), indexPath);

    var url = NSUrl.FromString("https://www.youtube.com/watch?v=tAGd-nev78g");

    AVPlayer player = AVPlayer.FromUrl(url);

    var playerViewController = new AVPlayerViewController();

    playerViewController.Player = player;
    playerViewController.View.Frame = new CoreGraphics.CGRect(0, 
                                                              0, 
                                                              cell.Frame.Width,
                                                              200);

    playerViewController.ShowsPlaybackControls = false;
    cell.AddSubview(playerViewController.View);

    player.Play();

    return cell;
}

播放器似乎已准备好,URL确认为HTTPS协议,播放器状态为“已准备好播放”。

但我得到的只是黑色画布:

enter image description here

我的代码出了什么问题?当我重新启动Xamarin,清理并重建应用程序时,有时会有一个 活动指示器显示3秒钟,但带有禁用播放按钮的黑色画布随后返回。

无法弄清楚为什么,测试在iOS 9模拟器和我的iPhone上播放视频。

1 个答案:

答案 0 :(得分:0)

我是这样做的:(不要忘记关闭TransportSecurity)。这是一团糟,但它确实有效。

    public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
    {
        if (player.Status == AVPlayerStatus.ReadyToPlay)
        {
            Console.WriteLine("Ready to play");
            player.Play();
        }
    }

    public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
    {
        var cell = (RFVideoTBC)tableView.DequeueReusableCell(RFVideoTBC.Identifier(), indexPath);

        player = AVPlayer.FromUrl(NSUrl.FromString("http://techslides.com/demos/sample-videos/small.mp4"));
        var layer = AVPlayerLayer.FromPlayer(player);
        layer.BackgroundColor = UIColor.Clear.CGColor;
        layer.VideoGravity = AVLayerVideoGravity.ResizeAspect;

        layer.Frame = new CoreGraphics.CGRect(16,
                                              75,
                                              cell.Frame.Width - 32,
                                              200);

        cell.ContentView.Layer.AddSublayer(layer);

        return cell;
    }