【发布时间】:2018-09-16 17:59:25
【问题描述】:
我可以在我的 TextureView 中看到正在播放的视频,但它已严重损坏。我已经确认我正在以正确的顺序接收完整的数据包。我已经能够正确解析 RTP 标头。我相信我的问题与 SPS 和 PPS 以及 MediaCodec 有关。
我的理解是,您应该从消息中剥离 RTP 标头,并在消息的开头插入一个 0x00000001 的 RTP 起始代码,以便解码器的输入缓冲区的格式为 0x00000001[sps ] 0x00000001[pps] 0x00000001[视频数据].
我的困惑是 MediaCodec 似乎需要一个 MediaFormat ,其中 SPS 和 PPS 分别手动定义。我发现了我目前正在使用的这个示例以及我上面定义的消息格式:
MediaFormat format = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC, width, height);
// from avconv, when streaming sample.h264.mp4 from disk
byte[] header_sps = {0, 0, 0, 1, 0x67, 0x64, (byte) 0x00, 0x1e, (byte) 0xac, (byte) 0xd9, 0x40, (byte) 0xa0, 0x3d,
(byte) 0xa1, 0x00, 0x00, (byte) 0x03, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x3C, 0x0F, 0x16, 0x2D, (byte) 0x96}; // sps
byte[] header_pps = {0, 0, 0, 1, 0x68, (byte) 0xeb, (byte) 0xec, (byte) 0xb2, 0x2C}; // pps
format.setByteBuffer(CSD_0, ByteBuffer.wrap(header_sps));
format.setByteBuffer(CSD_1, ByteBuffer.wrap(header_pps));
如您所见,我没有为 MediaFormat 提供来自我的视频流的 SPS 和 PPS,而是使用来自 Internet 示例的硬编码集。我试图找到解释如何从数据包中提取 SPS 和 PPS 的来源,但找不到任何东西。
问题:
如果已经为 MediaFormat 提供了 SPS 和 PPS,我是否应该在将其传递给 MediaCodec 之前从缓冲区中剥离 SPS 和 PPS?
如何正确解析消息中的 SPS 和 PPS?
这是我的一个 RTP 数据包的前几个字节,其中包含标头:
80 a1 4c c3 32 2c 24 7a f5 5c 9f bb 47 40 44 3a 40 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 0 0 1 c0 0 71 80 80 5 21 0 5d d6 d9 ff fb 12 c4 e7 0 5 5c 41 71 2c 30 c1 30 b1 88 6c f5 84 98 2c 82 f5 84 82 44 96 72 45 约 96 30 35 91 83 86 42 e4 90 28 b1 81 1a 6 57 a8 37 b0 60 56 81 72 71 5c 58 a7 4e af 67 bd 10 13 1 afe e9 71 15 13 da a0 15 d5 72 38 36 2e 35 11 31 10 a4 12 1e 26 28 40 b5 3b 65 8c 30 54 8a 96 1b c5 a7 b5 84 cb a9 aa 3d d4 53 47 0 45 34 55 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff bf 9 95 2b 73 93 4e c3 f9 b1 d0 5f f5 de c9 9e f7 f8 23 ab 一个5个啊
【问题讨论】:
标签: android video-streaming h.264 rtp android-mediacodec