ios – AVPlayer(和MPMoviePlayerController)尝试缓冲整个(流媒体)视频,耗尽内存

ios – AVPlayer(和MPMoviePlayerController)尝试缓冲整个(流媒体)视频,耗尽内存,第1张

概述我是一个新的iOS开发人员,我正在为视频共享网站开发一个视频播放器应用程序,有时录制的内容包括两个视频流(一个显示主持人,另一个显示他的屏幕录制).我正在尝试用AVFoundation播放第二个视频,创建一个AVPlayer.有些视频可以很好地运行,但是对于其他一些视频,它会耗尽内存.经过大量调查后我发现它试图将整个视频缓冲到内存中. 我花了几个小时谷歌搜索它,但找不到任何东西. 我创建了一个小项 我是一个新的iOS开发人员,我正在为视频共享网站开发一个视频播放器应用程序,有时录制的内容包括两个视频流(一个显示主持人,另一个显示他的屏幕录制).我正在尝试用AVFoundation播放第二个视频,创建一个AVPlayer.有些视频可以很好地运行,但是对于其他一些视频,它会耗尽内存.经过大量调查后我发现它试图将整个视频缓冲到内存中.

我花了几个小时谷歌搜索它,但找不到任何东西.

我创建了一个小项目来证明这一点:
github project.它为两个不同的视频流设置两个AVPlayer,并更新UI以显示玩家的AVPlayerItem的loadedTimeRanges.对于第一个视频,它只缓冲~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上,并试图传播这些文件:然后我没有问题!它缓冲整个电影,但它不会耗尽内存.如果我从原始站点(我们的视频共享站点)流式传输它,它只会耗尽内存. URL存在于github项目中.

我真的很期待任何可能导致这种情况的提示.

谢谢!

解决方法 这个问题确实是由于缺少从Wowza媒体服务器发送的视频流的音轨而引起的. (我从您的流网址中推断出您正在使用Wowza媒体服务器来传输视频).

为验证此问题,我创建了一个没有音轨的5分钟视频文件.

mplayer -nolirc -vo null -ao null -frames 0 -IDentify test_60.mp4...opening vIDeo decoder: [ffmpeg] FFmpeg's libavcodec codec familySelected vIDeo codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)==========================================================================ID_VIDEO_CODEC=ffh264Audio: no soundStarting playback......

然后我使用mp4Box为该视频文件添加了一首mp3轨道.

MP4Box -new -add test_60.mp4 -add test_music.mp3 test_60_music.mp4

并确认确实存在音轨.

mplayer -nolirc -vo null -ao null -frames 0 -IDentify /tmp/test_60_music.mp4...AUdio: 44100 Hz,2 ch,floatle,320.0 kbit/11.34% (ratio: 40000->352800)ID_AUdio_BITRATE=320000ID_AUdio_RATE=44100ID_AUdio_NCH=2Selected audio codec: [ffmp3float] afm: ffmpeg (FFmpeg MPEG layer-3 audio)==========================================================================AO: [null] 44100Hz 2ch floatle (4 bytes per sample)ID_AUdio_CODEC=ffmp3floatStarting playback......

然后,我将test_60.mp4和test_60_music.mp4放在Wowza内容目录中,并对它们进行测试.我实际上写了一个类似于你的小测试应用程序来检查loadedTimeRanges,但只是从设备通过safari加载视频应该足以看出差异.

我打开wowza_server:1935 / vod / mp4:test_60.mp4 / playList.m3u8并在开始播放时按下暂停.缓冲区指示器持续增加,直到加载完整的5分钟视频.

然后,我打开了wowza_server:1935 / vod / mp4:test_60_music.mp4 / playList.m3u8并做了同样的事情,但只加载了第一个1/5(大约1分钟).

所以Wowza服务器的打包似乎是一个问题 – 注意在adobe(flash)媒体服务器5.0上我不会遇到这个问题.无论视频是否包含音轨,都只缓冲60秒.

希望这很有帮助.我在Wowza forums请求了Wowza人的输入

总结

以上是内存溢出为你收集整理的ios – AVPlayer(和MPMoviePlayerController)尝试缓冲整个(流媒体)视频,耗尽内存全部内容,希望文章能够帮你解决ios – AVPlayer(和MPMoviePlayerController)尝试缓冲整个(流媒体)视频,耗尽内存所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/999420.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存