【发布时间】:2012-06-10 04:00:59
【问题描述】:
我是一名新的 iOS 开发人员,我正在为视频共享网站开发视频播放器应用程序,其中有时录制包含两个视频流(一个显示演示者,另一个显示他的屏幕录制) .我正在尝试使用 AVFoundation 播放第二个视频,创建一个 AVPlayer。有些视频效果很好,但有些视频内存不足。经过大量调查后,我发现它会尝试将整个视频缓冲到内存中。
我花了几个小时在谷歌上搜索它,但找不到任何东西。
我创建了一个小项目来证明这一点: github project。它为两个不同的视频流设置了两个 AVPlayer,并更新了 UI 以显示播放器的 AVPlayerItem 的加载时间范围。对于第一个视频,它只缓冲约 60 秒,这很好,但对于第二个视频,它一直在缓冲。
self.player1 = [AVPlayer playerWithURL:url1];
self.player2 = [AVPlayer playerWithURL:url2];
还有两个文本标签:
self.data1.text = [NSString stringWithFormat:@"Player 1 loadedTimeRanges: %@",
self.player1.currentItem.loadedTimeRanges];
self.data2.text = [NSString stringWithFormat:@"Player 2 loadedTimeRanges: %@",
self.player2.currentItem.loadedTimeRanges];
也许这很重要:过度缓冲的视频没有音轨,只有视频。
更新:我重现了使用 MPMoviePlayerController 而不是 AVPlayer 的问题,并检查了 playableDuration 属性。对于第一部电影,它会停止大约 60 秒,对于第二部电影,它会继续播放,然后内存不足。
UPDATE2:我得到了实际的视频文件并将它们放到 Dropbox 中,并尝试流式传输这些文件:那么我没有问题!它缓冲整部电影,但不会耗尽内存。如果我从原始站点(我们的视频共享站点)流式传输它们,它只会耗尽内存。网址在 github 项目中。
我真的很期待任何可能导致这种情况的提示。
谢谢!
【问题讨论】:
-
按照 Apple 指南的建议,不要对更大的文件使用渐进式下载,而是使用适当的 HTTP 流。
-
嗨@Till!谢谢你的意见!我不确定我是否理解,如果我应该将应用程序更改为使用流媒体,或者服务器端不正常?我遇到问题的 URL 是:
http://stream.videotorium.hu:1935/vtorium/_definst_/mp4:705/3705/3705_3571_content_hq.mp4/playlist.m3u8?sessionid=cp8dl757mvqukp0bsoflhd79s0_3705,如果我 curl 它,我会得到一个包含另一个 URL 的 m3u,如果我 curl 那个,我会得到一个包含数百个 URL 的 m3u,例如media_1.ts?wowzasessionid=530673462&sessionid=cp8dl757mvqukp0bsoflhd79s0_3705。这是否意味着服务器端正在发送正确的流?
标签: ios video-streaming avfoundation avplayer buffering