不适合作为流媒体的视频文件

转自 http://blog.sina.com.cn/foreverlovelost
 
  测试各个服务器上的视频文件的时候,经常发现有些视频莫名其妙的播放不流畅,甚至是非常卡顿以至于播放不了,但是在本地播放这些文件非常流畅,将这些文件下载下来播放,并且将MPEG4Extractor中解析的log打上,发现一个规律,这些视频文件的树状结构的box中,moov这个字段都在文件的最末尾,也就是在真正视频数据的后面。
    由于视频播放前首先需要使用extractor解析这个文件,其实解析就是解析moov这个属性的box,解析完moov这个box之后就不继续读取文件了,通过moovbox里面各个子box记录的各种表建立各个音视频数据在文件中的offset和size。
    由于网络下载数据比较慢,而且Android里面读取网络数据的buffer缓冲和清空机制,如果经常需要在文件前后跳转读取时就比较低效率了,比如你现在读取文件末尾offset1除size1大小的数据,这个时候播放器会多读取一些存放在buffer中,如果这个时候又要跳到文件开始的某个offset2处读取size2大小的数据,播放器需要将先前存放在buffer中的数据清空,然后将offset2发给服务器,让服务器给播放器发offset2这个位置的数据,如果经常性这样跳转的话,就比较耗时和低效率了。
    打开NuCacheSource中的log可以看出这个现象。
    上面是自己分析多个这种问题后总结出来的,今天突然间在Androidsdk上找到了证据,终于找到了谷歌对于这种情况的说明,也即有一些类型的视频文件是不适宜做为流媒体播放的,以后在遇到这种问题,就可以理直气壮的写明原因了。

   The video is streamed and its container is notvalid for progressive
   playback i.e the video's index (e.g moov atom)is not at the start of the
   file.
   seeandroid.media.MediaPlayer.OnErrorListener
    
   public static final intMEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200;

    if (framework_err ==MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK){
         messageId =com.android.internal.R.string.VideoView_error_text_invalid_progressive_playback;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值