Отдельные полезные нагрузки RTSP от gst-rtsp-сервера - PullRequest
1 голос
/ 15 марта 2019

У меня есть источник видео RTSP (h265), который я могу отображать с помощью VLC. Я хотел бы разделить поток на два, один с собственным разрешением (кодированный с h265), а другой с новым, более низким разрешением (с кодированным h264). Оба новых потока также должны быть потоками RTSP, которые можно просматривать с помощью VLC.

Из-за пропускной способности я могу подключить только один клиент к первичному источнику.

Пока у меня есть работающая настройка gst-rstp-server, с единственной фабрикой носителей, выполняющей эту строку запуска gst:

rtspsrc location = ... ! rtph265depay! h265parse! имя тройника = t! очередь ! rtph265pay name = pay1 pt = 96 t. ! очередь ! расшифровка! видеомасштаб видеорейт! видео / x-raw, частота кадров = 30/1, ширина = 640, высота = 480! битрейт x264enc = 500 предустановка скорости = сверхбыстрая мелодия = нулевая задержка! h264parse! rtph264pay name = pay0 pt = 96

Я установил точку монтирования для фабрики носителей и могу подключиться к VLC, например. "RTSP: //127.0.0.1: 8550 / тест". При этом я могу получить только тот подпоток pay0 в VLC. Я вижу, что оба подпотока работают, изменяя, какой из них pay0. Но как мне VLC показать мой pay1?

В противном случае, как я могу использовать оригинальный источник видео, а затем использовать две разные фабрики медиаданных (с разными строками запуска gst ...), использующие эти тройники в качестве собственного источника?

1 Ответ

0 голосов
/ 18 марта 2019

Оба потока отправляются вам одновременно.Обычно в случае 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 конвейера.

...