解码流程介绍

什么是解码

  • 拼帧之后解码,解码得到的是yuv数据,可以在显示器显示
  • 分类:
    • 硬解码:GPU/DSP(移动端)
      • 效率高
    • 软解码:CPU
      • 对cpu性能要求很高
      • 对硬件要求不高,兼容性很高
  • yuv数据的显示:通过GPU绘制可以在显示器显示

xp播放器

  • xp:可扩展播放器
  • xp包含三个模块
    • mpm媒体流处理组件
      • 把从各个协议、设备得到的码流转化为标准播放器可以播放的码流
    • mcm播放控制集组件
      • 控制媒体播放器的动作
    • ppm协议解析组件
      • 解析协议
      • sip(实况)、rtsp(回放)

解码流程

  • 收包-拼帧-解码-送显
    • 收包
      • 去掉tcp/udp头,不对rtp做处理,将得到的ts\ps\onvif数据送拼帧过滤器
      • udp和tcp的处理有区别
        • tcp前面加了24 00 ff ff
    • 拼帧
      • 去除ts/ps/onvif头之后得到es,放入内存,内存中的es达到一帧大小的时候送解码器解码
      • 解码标签:根据sip协议得到,用于去除ts、ps、onvif头
      • 区分ps、ts、onvif
        • ps
          • 必定有rtp头(12字节)
          • 每一帧第一个包为 00 00 01 ba
        • ts
          • 可带有rtp头也可不带rtp头
        • onvif
          • 必定带有rtp头
          • onvif流中每一帧的第一个包里第一个字节为3C、5C、7C,第二个字节为81(P帧)或85(I帧)
    • 解码
      • 收到es流,经过解码之后得到YUV数据可以送显
    • 送显
      • 根据协商时获得的xp的ip地址和收流端口号,将YUV数据送至播放器
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
视频 MediaCodec 解码流程通常分为以下几个步骤: 1. 创建 MediaCodec 对象:使用相应的解码器名称创建 MediaCodec 对象,例如 H.264 视频解码可以创建 MediaCodec 对象 `MediaCodec.createDecoderByType("video/avc")`。 2. 配置解码器:设置解码器的输入格式和输出格式,输入格式可以是容器格式(如 mp4、flv 等)或者裸流格式(如 H.264、H.265 等),输出格式可以是 Surface、ByteBuffer 等。 3. 启动解码器:调用 MediaCodec 的 start() 方法启动解码器,此时解码器进入执行状态。 4. 推送数据:将需要解码的数据输入到解码器中,可以是视频流、音频流等。对于视频流,通常是将 H.264 等压缩格式的数据进行解码,得到原始的 YUV 数据。 5. 获取解码数据:调用 MediaCodec 的 dequeueOutputBuffer() 方法获取解码后的数据,返回一个输出缓冲区的索引,通过该索引可以获取输出缓冲区中的数据。 6. 处理解码数据:根据输出缓冲区的格式,将数据转化为可显示的格式,如将 YUV 数据转化为 Bitmap 或者 Surface 中的图像。 7. 释放输出缓冲区:使用完输出缓冲区后,需要调用 MediaCodec 的 releaseOutputBuffer() 方法释放输出缓冲区。 8. 停止解码器:当解码完成或者需要停止解码器时,调用 MediaCodec 的 stop() 方法停止解码器。 以上是 MediaCodec 解码流程的主要步骤,具体实现时需要根据不同的需求和情况进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值