Передача сигналов WebRTC выполняется успешно, но видео не передается

#webrtc #ros #amazon-kinesis-video-streams

#webrtc #ros #amazon-kinesis-video-streams

Вопрос:

Я пытаюсь настроить видеопоток от робота с использованием WebRTC.

Насколько я могу судить, сигнализация успешно устанавливает соединение, однако потоковое видео не передается.

Я использую AWS Kinesis Video в качестве сервера сигнализации и AWS Kinesis video streams WebRTC sdk для главного узла.

Для просмотра я использую тестовую страницу Kinesis WebRTC с единственным изменением, заключающимся в том, что просмотрщик не запрашивает аудио.

Я считаю, что сигнализация работает. По крайней мере, зритель одновременно отправляет и получает кандидатов ICE, и ошибок нет.

Главный узел также начинает отправлять данные, как ожидалось, но видео никогда не отображается в программе просмотра.

Мой вопрос в том, как я могу отладить проблему?

Я просмотрел внутренние компоненты Chrome webrtc, и он сгенерировал эти графики. Это показывает мне, что chrome получает пакеты, но никакие кадры не декодируются. Это правильно?

введите описание изображения здесь

В роботе я использую RoS в качестве промежуточного уровня и пытаюсь передать потоковую передачу с веб-камеры usb.
Чтобы сделать это, я запускаю узел h264_video_encoder. Когда узлы запускаются, он сообщает мне, что у него есть эти настройки:

264 - core 152 r2854 e9a5903 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=2 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=3 lookahead_threads=3 sliced_threads=1 slices=3 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=1 keyint=30 keyint_min=16 scenecut=40 intra_refresh=0 rc=abr mbtree=0 bitrate=2048 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00

Я подозреваю, что наиболее вероятная проблема связана с кодировкой, но я не знаю, как приступить к отладке этой проблемы.

Ответ №1:

Проблема, с которой я столкнулся, заключалась в том, что в потоке h264, который я сгенерировал, отсутствовали итоговые значения SPS и PPS, поэтому просмотрщик не знал, как декодировать поток.

Основная проблема заключалась в том, что я конвертировал из KinesisVideoFrame.msg, который содержал мой закодированный поток, но я не знал, что frame_data не содержит пакетов SPS и PPS. Эти пакеты хранятся в codec_private_data, поэтому мне пришлось добавить codec_private_data к frame_data, чтобы получить окончательные данные кадра для отправки по потоку

Комментарии:

1. в общем случае «получает данные, но статистика декодирования кадров остается равной 0» — это индикатор неисправности декодера h264. Хороший улов!