Stagefright 增加 flv 支持

本文介绍使用ffmepg的flv demux,在Stagefright中增加对flv的支持
主要代码在这里: https://github.com/fallgold/stagefright_flv

1、ffmpeg for android
    VLC使用ffmpeg,这里偷个懒直接使用的VLC for Android中的ffmpeg
    默认已经打开flv支持选项,直接 {path to vlc-android}/vlc/contrib/android/ffmpeg 拷贝至 {path to android}/external
    调整 config.mak中的prefix为 {path to android}/external/ffmpeg
    make && make install 
    
    可能的编译出错:undefined reference to 'sincos'
    原因:ndk的libm 有问题,改为 croot/out/system/ 下的(复制一份覆盖过去)。
    
2、libstragefright 的Android.mk增加 ffmpeg链接库
    LOCAL_LDFLAGS += -Lexternal/ffmpeg/lib -lavformat -lavcodec -lavutil
    
3、ffmpeg为c开发,需要对使用的接口进行调整,或加一层封装
    参考ffmpegflv.c, ffmpegflv.h
    
4、Extractor
    参考FLVExtractor.cpp, FLVExtractor.h
    
几个比较重要的细节:
1、时间及a/v同步
    可参考前文《 ffmpeg,Stagefright 的时间管理及a/v同步
2、aac音频解码
    aac decode需要ESDS数据才能进行解码
    demux时,ffmpeg把aac的ESDS解到了extradata中,把这部分数据写入meta的kKeyESDS段即可
3、h264视频解码
    a、同样的,需要把extradata写入meta的kKeyAVCC段。
    b、h264硬件解码器需要每一个packet需要特殊的包头0x00000001
        原packet包头 4bytes 为packet长度,需要改为 0x00000001
        

至此,(还不完,调完这几个细节,几乎,郭德纲老师都长发及腰了)

mediaplay已经能很好的支持大部分flv(aac/mp3 + h264)的播放了。flv1(sorenson H263)就算了。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值