【问题标题】:how to create Codec specific Data ( csd ) for h264 in MediaCodec?如何在 MediaCodec 中为 h264 创建编解码器特定数据 ( csd )?
【发布时间】:2020-06-08 10:33:49
【问题描述】:

嗨,我有一个 android 项目,我必须通过套接字从服务器接收音频和视频,音频部分运行完美。 但是视频部分不工作我不知道是什么原因,因为解码器在解码视频数据包时没有显示任何错误。 我使用的视频编解码器是来自 ffmepeg 编码器的 H.264/AVC,具有以下设置:-

tune = 零延迟

个人资料 = 基线

等级 = 3

宽度 = 320

身高 = 240

帧率 = 30

GOPSize = 30

我发现我必须将 CSD-0 和 CSD-1 添加到 MediaCodec 配置,但我不知道如何将 H.264 SPS/PPS 数据添加到配置中

这是我找到的代码,但它不适合我,

byte[] header_sps = { 0, 0, 0, 1, 103, 100, 0, 40, -84, 52, -59, 1, -32, 17, 31, 120, 11, 80, 16, 16, 31, 0, 0, 3, 3, -23, 0, 0, -22, 96, -108 };
byte[] header_pps = { 0, 0, 0, 1, 104, -18, 60, -128 };

MediaFormat videoFormat = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC , 320 , 240 );
videoFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE  , 100000);
videoFormat.setByteBuffer("csd-0", ByteBuffer.wrap(header_sps));
videoFormat.setByteBuffer("csd-1", ByteBuffer.wrap(header_pps));

MediaCodec videoDecoder = MediaCodec.createDecoderByType(MediaFormat.MIMETYPE_VIDEO_AVC);
videoDecoder.configure(videoFormat , surface , null , 0);
videoDecoder.start();

如果有人知道在这种情况下解码 H.264 的正确方法是什么,这将很有帮助

【问题讨论】:

    标签: android ffmpeg h.264 android-mediacodec


    【解决方案1】:

    您需要使用视频中正确的 sps/pps,而不是随机硬编码的。您可以通过解析比特流来获得它。看到这个:Possible Locations for Sequence/Picture Parameter Set(s) for H.264 Stream

    【讨论】:

      猜你喜欢
      • 2021-06-06
      • 2019-06-21
      • 1970-01-01
      • 2017-06-30
      • 2018-10-17
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      相关资源
      最近更新 更多