【发布时间】:2014-06-15 22:05:24
【问题描述】:
我正在使用带有 MPMoviePlayerController 的简单 iOS 测试应用程序的实时流媒体。我在 iOS Simulator 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}'
当我开始播放流时,我几乎可以立即听到声音,并在屏幕上看到视频的一帧被冻结;大约十二秒后,视频开始正常播放,此后一切正常。控制台中没有错误。
我可以看到 iOS 请求流索引文件,然后在应用加载时请求流文件 - 所以它请求文件正常。
我认为这可能与 iOS 喜欢使用较低的比特率有关,然后根据可用带宽切换到更高的比特率,正如我在文档中所读到的那样。
如果我将 MPMoviePlayerController 指向以下苹果测试流,则它会立即播放,并且似乎首先使用较低质量的流约 12 秒,然后再切换到更高的质量/比特率: http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8
我尝试呈现一个包含多个比特率的 .m3u8 文件,例如苹果示例,但它的行为方式与冻结帧相同,但比特率较低 12 秒,低分辨率播放约 2-5 秒然后屏幕变黑一段时间,然后切换到高比特率 - 可以一直听到音频。播放停止的控制台出现错误。
有谁知道视频卡帧的原因以及如何解决它并让它从一开始就流畅播放?
【问题讨论】:
标签: ios mpmovieplayercontroller http-live-streaming