FFMpeg 硬解码 android mediacodec for H265 for视频流

2 篇文章 0 订阅
1 篇文章 0 订阅

那么:先取出解码器

m_avcodec = avcodec_find_decoder_by_name("hevc_mediacodec"); //h265

获取上下文
m_AVCodecContext = avcodec_alloc_context3(m_avcodec);

注意此时的上下文m_AVCodecContext 是没有extradata

这个时候你通过上下文去打开解码器

int a = avcodec_open2(m_AVCodecContext, m_avcodec, NULL);

就会报错因为缺少关键数据extradata

如果读取文件那么此上下文m_AVCodecContext 所需要的extradata在ffmpeg 读取文件时就已经赋值 ,而如果需要解析的是一个视频流则需要对exdata进行赋值

如何赋值 这个参数是解码时重要的参数那么如何获取呢

首先这个参数所需要的格式为 VPS + SPS + PPS

H265相较于 H264来说 extradata不仅需要SPS,以及pps数据并且还要一个VPS数据

寻找Nalu头00 00 00 01 之后找到 0x40 -vps   0x42 -sps 0x 44 -pps

注意在寻找这些标志头(例如vps的0x40)一定要保证前4位或者前三位是 00 00 00 01 或者00 00 01

例 00 00 00 01 40 .... xx 00 00 00 01(xx为任意数 是vps的末尾)

如果找到了标志头0x40 那么就继续找下一个nalu头 00 00 00 01 那么 这个nalu头之前的数即是 xx   40 ..... 一直到xx就是所需要找的vps 那么同样的方法找到 sps 和 pps 之后 就可以 将其拼接 00 00 00 01 + vps + 00 00 00 01 +sps + 00 00 00 01 pps

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值