#gstreamer #vlc #rtsp
#gstreamer #vlc #rtsp
Вопрос:
У меня есть RTSP-источник видео (h265), который я могу отображать с помощью VLC. Я хотел бы разделить поток на два, один с собственным разрешением (в кодировке h265), а другой с новым, более низким разрешением (в кодировке h264). Оба новых потока также должны быть потоками RTSP, доступными для просмотра с помощью VLC.
Из-за соображений пропускной способности я могу подключить только одного клиента к основному источнику.
Пока что у меня есть рабочая настройка gst-rstp-сервера с единственной медиа-фабрикой, на которой выполняется эта строка запуска gst:
местоположение rtspsrc=… ! rtph265depay! h265 разбор! имя тройника=t ! очередь! rtph265pay name=pay1 pt=96 т. ! очередь! декодирование завершено ! масштабирование видео! снимайте видео! видео / x-raw, частота кадров = 30/1, ширина = 640, высота = 480 ! битрейт x264enc = 500 предустановленная скорость = сверхбыстрая настройка = нулевая задержка ! h264parse ! rtph264pay name=pay0 pt=96
Я настроил точку монтирования для фабрики мультимедиа и могу подключаться к VLC, например. «rtsp: //127.0.0.1: 8550/test». При этом я могу получать только тот подпоток, который равен pay0 в VLC. Я вижу, что оба подпотока работают, изменив, какой из них является pay0. Но как я могу заставить VLC показывать мой pay1?
В противном случае, как я могу использовать исходный источник видео, а затем две разные фабрики мультимедиа (с разными строками запуска gst …) используют tee в качестве собственного источника?
Ответ №1:
Оба потока отправляются вам одновременно. Обычно в случае pay0 и pay1 будет отправляться видео и аудио. В вашем случае, когда вам нужны 2 отдельных видеопотока, вам нужно будет изменить код.
Простой пример того, чего вы хотите достичь, можно сделать, изменив файл по адресу gst-rtsp-server/examples/test-launch.c
factory = gst_rtsp_media_factory_new ();
gst_rtsp_media_factory_set_launch (factory, argv[1]);
gst_rtsp_media_factory_set_shared (factory, TRUE);
gst_rtsp_mount_points_add_factory (mounts, "/stream1", factory);
gst_rtsp_media_factory_set_launch (factory, argv[2]);
gst_rtsp_media_factory_set_shared (factory, TRUE);
gst_rtsp_mount_points_add_factory (mounts, "/stream2", factory);
Затем начните с ./test-launch "rtspsrc location=... ! rtph265depay ! h265parse ! rtph265pay name=pay1 pt=96" "rtspsrc location=... ! rtph265depay ! h265parse ! decodebin ! videoscale ! videorate ! video/x-raw,framerate=30/1,width=640,height=480 ! x264enc bitrate=500 speed-preset=superfast tune=zerolatency ! h264parse ! rtph264pay name=pay0 pt=96"
Однако тогда у вас на вашей камере было бы 2 потребителя. Если вы предпочитаете использовать только один раз, вам следует настроить поток и сделать его доступным в качестве src для вашего gst_rtsp_media_factory_set_launch
конвейера.