在AVFoundation中有一种相对简单的循环视频方式吗?
我已经创建了我的AVPlayer和AVPlayerLayer:
avPlayer = [[AVPlayer playerWithURL:videoUrl] retain];
avPlayerLayer = [[AVPlayerLayer playerLayerWithPlayer:avPlayer] retain];
avPlayerLayer.frame = contentView.layer.bounds;
[contentView.layer addSublayer: avPlayerLayer];
然后我播放我的视频:
[avPlayer play];
视频播放正常但最后停止播放 . 使用MPMoviePlayerController,您只需将其 repeatMode
属性设置为正确的值即可 . 没有't appear to be a similar property on AVPlayer. There also doesn'似乎是一个回调,它将告诉我电影什么时候结束,所以我可以寻找开头并重新播放 .
我没有使用MPMoviePlayerController,因为它有一些严重的限制 . 我希望能够一次播放多个视频流 .
16 回答
玩家结束时可以获得通知 . 检查
AVPlayerItemDidPlayToEndTimeNotification
设置播放器时:
ObjC
这样可以防止玩家在结束时暂停 .
在通知中:
这将回放电影 .
不要忘记在释放播放器时取消注册通知 .
Swift
如果它有帮助,在iOS / tvOS 10中,有一个新的AVPlayerLooper()可用于创建无缝的视频循环(Swift):
这是在2016年WWDC上展示的"Advances in AVFoundation Playback":https://developer.apple.com/videos/play/wwdc2016/503/
即使使用这段代码,在我向Apple提交错误报告并获得此回复之前,我还是有一个打嗝:
事实证明,Premiere一直在导出文件的音轨长度与视频略有不同 . 在我的情况下,完全删除音频是好的,这解决了问题 .
在 Swift :
您可以在玩家结束时获得通知...检查AVPlayerItemDidPlayToEndTimeNotification
设置播放器时:
这样可以防止玩家在结束时暂停 .
在通知中:
Swift3
这将回放电影 .
不要忘记在释放播放器时取消注册通知 .
以下是我为防止暂停打嗝问题而采取的措施:
Swift:
Objective C:
NOTE: 我没有使用
avPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone
,因为它不需要 .我建议使用AVQueuePlayer无缝循环播放视频 . 添加通知观察器
并在其选择器中循环播放视频
为了避免视频倒带时的差距,在合成中使用同一资产的多个副本对我来说效果很好 . 我在这里找到了它:www.developers-life.com/avplayer-looping-video-without-hiccupdelays.html(链接现已死) .
适用于Swift 3和4
这对我来说没有打嗝问题, point is in pausing 在调用seekToTime方法之前的播放器:
将视频加载到AVPlayer后(当然是通过其AVPlayerItem):
addDidPlayToEndTimeNotificationForPlayerItem方法:
在viewWillDisappear方法中:
在视图控制器的实现文件中的接口声明中:
在尝试之前需要看到这个正常运行?下载并运行此示例应用程序:
https://developer.apple.com/library/prerelease/ios/samplecode/AVBasicVideoOutput/Listings/AVBasicVideoOutput_APLViewController_m.html#//apple_ref/doc/uid/DTS40013109-AVBasicVideoOutput_APLViewController_m-DontLinkElementID_8
在我的应用程序中,它使用了这个代码,在视频结束和开头之间没有任何暂停 . 事实上,根据视频,我无法再将视频告诉视频,保存时间码显示 .
你可以添加一个AVPlayerItemDidPlayToEndTimeNotification观察者并从选择器中的start开始重放视频,代码如下
我的解决方案在Objective-c和AVQueuePlayer中 - 似乎你必须复制AVPlayerItem并在完成第一个元素的播放后立即添加另一个副本 . “有点”是有道理的,对我来说没有任何打嗝
https://gist.github.com/neonm3/06c3b5c911fdd3ca7c7800dccf7202ad
以下是在swift 4.1中的WKWebView中为我工作的WKwebviewConfiguration中WKWebView的主要部分
我做的是让它循环播放,就像我的代码如下:
在Xcode 10.1中 Swift 4.2 .
Yes ,有一种相对简单的方法可以使用
AVQueuePlayer()
,键值观察(KVO)技术和一个令牌来循环AVKit
/AVFoundation
中的视频 .这绝对适用于一堆H.264 / HEVC视频,CPU负担最小 .
这是一个代码:
使用AVPlayerViewController下面的代码,它为我工作
所有控件都要展示,希望它有所帮助
此属性已在
AVAudioPlayer
中定义 . 希望这可以帮到你 . 我正在使用Xcode 6.3 .