我正在通过一个使用MPMoviePlayerController的简单iOS测试应用程序来使用直播流。我在iOS模拟器7.1,XCode 5.1上运行它。我现在没有可以测试的物理设备。
该流位于本地网络上,但通过WiFi进行访问。使用VLC生成直播流,如下所示:
vlc -I dummy rtsp://media1.law.harvard.edu/Media/policy_a/2012/02/02_unger.mov vlc://quit --sout='#transcode{vcodec=h264,vb=512,scale=1,acodec=none,venc=x264{preset=ultrafast,aud,profile=baseline,level=30,keyint=5,bframes=0,ref=1},acodec=aac,ab=128}:std{access=livehttp{seglen=10,delsegs=true,numsegs=5,index=/tmp/streaming/mystream.m3u8,index-url=http://192.168.254.4/mystream-########.ts},mux=ts{use-key-frames},dst=/tmp/streaming/mystream-########.ts}'当我开始播放视频流时,我几乎可以立即听到声音,并在屏幕上看到一帧冻结的视频;大约12秒后,视频开始正常播放,此后一切正常。控制台中没有错误。
我可以看到iOS请求流索引文件,然后在应用程序加载时请求流文件-所以它请求文件是OK的。
我认为这可能与iOS最初更喜欢使用较低的比特率,然后根据可用带宽切换到较高的比特率有关,正如我在文档中读到的那样。
如果我将MPMoviePlayerController指向下面的苹果测试流,它会立即播放,似乎先使用较低质量的流大约12秒,然后切换到更高的质量/比特率:http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8
我试着演示了一个包含多个比特率的.m3u8文件,就像苹果的例子一样,但它的表现与冻结的帧相同,只是在较低的比特率下播放了12秒,播放了大约2-5秒的低分辨率,然后屏幕会空白一段时间,然后切换到高比特率-音频一直都能听到。控制台出现播放停顿错误。
有没有人知道视频帧冻结的原因,以及如何解决它,让它从一开始就流畅播放?
发布于 2014-06-17 14:19:20
通过使用其说明编译最新版本的FFmpeg修复了此问题:
https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
因为FFMpeg可以做我们需要的任何事情,所以对它的支持也会失去VLC部分。
~/bin/ffmpeg -y -i rtsp://media1.law.harvard.edu/Media/policy_a/2012/02/02_unger.mov -hls_time 10 /tmp/streaming/mystream.m3u8https://stackoverflow.com/questions/24234519
复制相似问题