RTSP потокового зеленого экрана (Android)
Здравствуйте, ребята, я работаю над проектом для потоковой передачи содержимого экрана устройства Android по сети. Я использовал libstreaming в качестве моей базы кода.
Я достиг нескольких вещей:
- Я могу записать экран, используя MediaCodec и VirtualDisplay (используя MediaProjection) в файл mp4. Это просто для проверки того, что параметры в порядке.
- Я могу отправить данные из MediaCodec (ByteBuffer) по сети. Я напечатал фактический поток, который отправляется для каждого кадра, он кажется другим и не пустым. Я даже использовал wireshark и вижу все пакеты, отправленные по протоколу UDP.
Теперь у меня проблема. Когда я подключаюсь к серверу RTSP с VLC, открывается экран видео. Но все, что я вижу, это зеленый экран, а иногда и серый. Просто на секунду или даже меньше, иногда я вижу часть экрана андроида (например, один из значков).
Этот же проект работает, если я вместо этого транслирую видео с камеры. Это заставляет меня думать, что все пакетирование и сервер RTSP в порядке.
Я запускаю vlc из командной строки, и это пример того, что я получаю:
[h264 @ 0x1050cdc00] Frame num gap 45065 45063
[h264 @ 0x1050cdc00] number of reference frames (1+1) exceeds max (1; probably corrupt input), discarding one
[h264 @ 0x1050cdc00] QP 4294967291 out of range
[h264 @ 0x1050cdc00] decode_slice_header error
[h264 @ 0x10091e800] number of reference frames (1+1) exceeds max (1; probably corrupt input), discarding one
[h264 @ 0x10091e800] Frame num gap 49161 49159
[h264 @ 0x10091e800] number of reference frames (1+1) exceeds max (1; probably corrupt input), discarding one
[h264 @ 0x10091e800] QP 4294967293 out of range
[h264 @ 0x10091e800] decode_slice_header error
[h264 @ 0x10091ee00] number of reference frames (1+1) exceeds max (1; probably corrupt input), discarding one
Это лог с vlc: http://pastebin.com/3TsDKrur
Параметры sps и pps установлены правильно. Когда я подключаюсь к серверу rtsp, я вижу, что это соответствует конфигурации sdp, и оба параметра находятся внутри него.
Кто-нибудь знает, что я могу делать здесь не так?
Благодарю.
PS: я не опубликовал никакого кода, так как он довольно большой, и кажется, что все хорошо, когда кадры приходят с камеры. Если это кому-нибудь понадобится, я буду более чем рад опубликовать это.
ОБНОВИТЬ:
Я пытался отладить код немного больше. Возможно, пакеты rtp созданы неправильно? Есть ли способ проверить правильность формата? Я искал пример, где пакеты создаются в Java, но я не смог найти ни одного. Любое предложение будет приветствоваться.
До сих пор я использовал H264Packetizer из libstreaming, но я думаю, что это не правильно, так как это очень старый код.
Здесь у вас есть скриншот, взятый из Wireshark. С пакетом вроде бы все в порядке.