您好,我有一个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的正确方法,将很有帮助
您需要使用视频中正确的sps / pps,而不是随机的硬编码。您可以通过解析位流来获取它。看到此:Possible Locations for Sequence/Picture Parameter Set(s) for H.264 Stream