如何在MediaCodec中为h264创建特定于编解码器的数据(csd?

问题描述 投票:0回答:1

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

tune = zerolatency

个人资料=基线

等级= 3

宽度= 320

高度= 240

frameRate = 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 mediacodec
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.