#gstreamer
#gstreamer
Вопрос:
Я транслирую Gstreamer’s videotestsrc с raspberry pi. Поток должен быть TCP.
Мой серверный конвейер:
gst-launch-1.0 videotestsrc horizontal-speed=5 ! x264enc tune="zerolatency" threads=1 ! mpegtsmux ! tcpserversink host=10.0.0.7 port=3344
Мой клиентский конвейер:
gst-launch-1.0 tcpclientsrc port=3344 host=10.0.0.7 ! tsdemux ! h264parse ! avdec_h264 ! autovideosink
Это действительно работает, я получаю желаемое видео на клиенте в окне OpenGL. Но:
-
Raspberry pi требует большой мощности процессора, около 60%.
-
Качество очень плохое. Я постоянно получаю некоторые поврежденные области, например, прямоугольники неправильного цвета, и видео иногда застревает на короткое время.
-
Я получаю подобные ошибки в клиентском терминале: ошибка при декодировании 5 МБ 13, байтовый поток 2817
Я использовал https://github.com/silvanmelchior/RPi_Cam_Web_Interface раньше (конечно, используя камеру raspberry pi вместо videotestsrc). У него очень низкая задержка, хорошее качество и почти нет мощности процессора. Но оно написано на PHP, и я хотел бы реализовать поток в приложении на c . Мне кажется, что GStreamer — хороший выбор для меня, поскольку именно для этих заданий он и был создан. Я также отлично использую GStreamer для потоковой передачи аудио.
Мои вопросы:
-
Почему GStreamer требует такой большой мощности процессора, в то время как
RPi_Cam_Web_Interface
почти ничего не требует? Это проблема сvideotestsrc
(потому что он создается в реальном времени)? -
Почему у меня такое плохое качество, даже при использовании интерфейса обратной связи и того же компьютера, что сервер и клиент?
-
Что я могу сделать, чтобы повысить эффективность и качество моей настройки?
Комментарии:
1.
videotestsrc
действительно создает сэмплы настолько быстро, насколько это возможно. Вы можете имитировать источник в реальном времени, передавis-live=true
дляvideotestsrc
. Также RPi поддерживает аппаратное кодирование H.264 (я думаю).x264enc
работает в программном обеспечении, что имеет большое значение. Проверьте, как использовать аппаратный кодировщик RPi через GStreamer.2. Спасибо. Действительно, проблема заключалась в videotestsrc. Я записал videotestsrc в файл, а затем воспроизвел файл на tcpserversink. Все проблемы устранены.
Ответ №1:
Вы можете снизить нагрузку на процессор, используя decodebin вместо avdec_h264. Я также пытаюсь повысить производительность, если кто-нибудь знает, пожалуйста, помогите
Комментарии:
1. Привет, я решил свои проблемы, и теперь я неплохо разбираюсь в gstreamer. Если вы попытаетесь сделать то, что я сделал, я рекомендую вам записать ваш videostestsrc на файловый канал, а затем воспроизвести файл. По-видимому, это также работает с добавлением live = true в videotestsrc, я не пробовал. Проблема в том, что videotestsrc создает как можно больше изображений, что приводит к большой загрузке процессора.
Ответ №2:
- Вы используете один и тот же raspberry pi для серверного и клиентского конвейеров, поэтому они используют одинаковые ресурсы soc, чем больше потребляет мощность процессора и выделяет тепла, тем лучше подключить радиатор к raspberry pi.
- Если у вас есть другой компьютер или raspberry pi, вы можете использовать его для отладки, чтобы выяснить, что плохое качество возникает при работе на стороне сервера или клиента или при смешивании сервер-клиент в предыдущем сценарии.
- Вы можете попробовать разные частоты кадров, используя caps внутри ваших конвейеров, затем изменить частоту кадров и увидеть различия в качестве выходного видео. и попробуйте v4l2src для серверного конвейера и измените разрешения и проверьте различия в выходных сценариях. Вот шаги, которым я следовал, чтобы оптимизировать свои потоковые конвейеры