2015-10-28 3 views
0

В настоящее время я работаю над Android приложение, которое будет воспроизводить и записывать видео форме удаленного источникаTroubleshoot GStreamer замораживания

Мой трубопровод выглядит следующим образом

videotestsrc do-timestamp=true ! videoscale add-borders=false ! capsfilter ! videoflip method=0 ! tee name=split 
    split. ! queue ! videoconvert ! glupload ! glshader ! autovideosink async=false ! 
    split. ! queue ! identity drop-probability=0 ! videoconvert ! timeoverlay ! x264enc key-int-max=10 ! h264parse ! splitmuxsink location=/sdcard/test-%d.mp4 

Единственная проблема стата я вижу в журналах

video_buffer_pool_set_config:<videobufferpool1> no caps in config 

Я не прошу исправить мой конвейер, я просто хочу понять, есть ли там общий алгоритм устранения таких заморозков?

ответ

2

Лучший инструмент, который у вас есть, - это, вероятно, макрос GST_DEBUG_BIN_TO_DOT_FILE, в gstdebugutils.h. Он покажет ваш конвейер и состояние каждого элемента. Это требует установки переменной окружения GST_DEBUG_DUMP_DOT_DIR.

Затем вы запускаете такую ​​команду, чтобы создать PNG или какой-либо другой файл изображения из точки.

dot -Tpng pipeline.dot -o pipeline.png

На наших настольных системах мы обычно упаковать все это вверх в команду, мы можем добавить к нашим программам. Я не уверен, что ваш лучший маршрут в Android. Возможно, есть некоторые дополнительные API, которые могут помочь.

После того, как вы идентифицируете свои элементы проблемы, используйте переменную окружения GST_DEBUG, чтобы добавить дополнительную регистрацию. Например, если у вас есть x264enc ошибки, используйте:

GST_DEBUG=2,x264enc:5

Это будет установить уровень протоколирования ошибок для всего, кроме x264enc, которая будет уровень отладки.

Также, если вы запустите отладчик, вы можете просматривать все потоки и находить, какой элемент висит.

Смежные вопросы