Декодирование видеопотока H264 с помощью MediaCodec

156
17 сентября 2018, 03:50

Мне в SDP в SIP-пакетах приходят данные про видео

            m=video 2025 RTP/AVP 102
            a=ptime:20
            a=rtpmap:102 H264/90000
            a=fmtp:102 profile-level-id=42e00a;packetization-mode=1;max-br=2048
            a=sendrecv

Я на андроиде создаю MediaCodec с такими параметрами:

            mMediaCodec = MediaCodec.createDecoderByType("video/avc");
            MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", 400, 300);
            mediaFormat.setByteBuffer("csd-0", ByteBuffer.wrap(header_sps));
            mediaFormat.setByteBuffer("csd-1", ByteBuffer.wrap(header_pps));
            mediaFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 400 * 300);
            mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 90000);
            mediaFormat.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1);
            mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
            mMediaCodec.configure(mediaFormat, videoView.getHolder().getSurface(), null, 0);
            mMediaCodec.start();

Но, все равно, не могу декодировать поток. Поток получаю из массива байтов в цикле(отдельный поток). Длина каждого пакета не превышает 1312 байт, где 12 это заголовки RTP, дальше еще в каждом пакете есть разделительные байты {0x00,0x00x,0x00,0x01}. С какими параметрами мне нужно создавать кодек для декодировки видеопотока

READ ALSO
Java try конструкция в try

Java try конструкция в try

Имеется ли смысл вкладывать try{} в еще один try{} ? Ведь можно было обойтись одним

165
Как сохранить в Room список обьектов?

Как сохранить в Room список обьектов?

Для примера, есть у меня класс Human() который как один из параметров содержит список Car()

205
Java объявление классов

Java объявление классов

Можно ли в java объявить класс прямо в методе?

166
Java работа с массивом

Java работа с массивом

если массив {true, true, true} result = true; если массив {true, false, true} result = false;

163