嵌入式 AVPlayer 无法播放视频。

4

我试图使用 Swift 嵌入视频播放器。当我运行应用程序时,我可以看到视频播放器,但是视频不会播放。请您检查是否有任何遗漏的地方,谢谢。

var playerItem: AVPlayerItem?
var player: AVPlayer?

if let videoLink = newLaunch.videoLinks where newLaunch.videoLinks!.count > 0{

    let videoUrl = videoLink[0]
    let streamingURL: NSURL = NSURL(fileURLWithPath: videoUrl)
    player = AVPlayer(URL: streamingURL)
    let playerController = AVPlayerViewController()
    playerController.player = player
    self.addChildViewController(playerController)
    self.videoContainerView.addSubview(playerController.view)
    playerController.view.frame = self.videoContainerView.bounds
    player!.play()
}

enter image description here


@MehulThakkar,我已经检查了文件的URL路径,我可以看到从服务器接收到的文件路径。 - zavrina
1
如果您正在使用服务器URL,则永远不要使用fileURLWithPath,遇到问题时请使用urlWithString来处理服务器URL。fileURLWithPath是用于本地URL的。现在它应该可以工作了,请尝试。我百分之百确定这个URL是问题所在,对吗? - Mehul Thakkar
你尝试过使用AVPlayerLayer吗? - Bhadresh Mulsaniya
@BhadreshMulsaniya,是的。当我尝试使用AVPlayerLayer时,甚至连视频播放器都没有显示出来。 - zavrina
@ZinMarHtet,你看过我的回答了吗? - Bhadresh Mulsaniya
显示剩余5条评论
4个回答

2

1

0
你使用的 IOS 版本是什么?看起来这可能与苹果的新传输层安全增强有关。
您需要启用您的应用程序,以允许从该特定域流式传输视频。您可以选择在开发应用程序时暂时绕过传输层安全。
查看此线程以了解如何执行此操作:https://dev59.com/xJXfa4cB1Zd3GeqPg48R#36305505 此外,您可能希望使用不同的 URL 构造器来流式传输文件:
let videoUrl = videoLink[0]
let streamingURL = NSURL(string: videoUrl) //- assuming videoLink is of type [String]
player = AVPlayer(URL: streamingURL)

编辑:

尝试以下代码:

let videoUrl = videoLink[0]
let streamingURL = NSURL(string: videoUrl)
let playerController = AVPlayerViewController()
playerController.player = AVPlayer(URL: streamingURL)
self.presentViewController(playerController, animated: true) {
    self.playerController.player?.play()
}

我正在使用iOS 8.1。在info.plist中,我将"Allow Arbitrary Loads = YES"设置为了YES。而且我也试过使用NSURL(string: videoUrl),但结果是相同的。视频仍然无法播放。 - zavrina
我编辑了我的答案,请从你的视图控制器尝试这种方法。希望能有所帮助! - Daniel Ormeño
感谢您的帮助,但视频仍无法播放。 - zavrina
糟糕!抱歉,我刚意识到我漏掉了一行代码 _playerController.player = AVPlayer(URL: streamingURL)_,我已经更新了代码块。 - Daniel Ormeño
在我的代码中,我将playerController嵌入到videoContainerView中。所以除了你的代码之外,我添加了两行代码来将子视图添加到videoContainerView中。但结果并没有什么不同。 - zavrina

-1

你可以将AVPlayer添加为视图的一层:

player = [[AVPlayer alloc] init....

playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
CGSize size = self.view.bounds.size;
float x = size.width/2.0-187.0;
float y = size.height/2.0 - 125.0;

playerLayer.frame = CGRectMake(x, y, 474, 320);
[playerLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
[self.view.layer addSublayer:playerLayer];
[player play];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接