Информация об изменениях

Сообщение Re[15]: Относительно твоих вопросов в рассылке gstreamer'а от 13.08.2023 21:30

Изменено 14.08.2023 8:13 Sharov

Re[15]: Относительно твоих вопросов в рассылке gstreamer'а
Здравствуйте, Conductor, Вы писали:

S>>Кажется, что такое на коленке собрал по образу и подобию, но не уверен, что все правильно и оптимально:

C>У тебя видеокарта на боевых машинах предполагается, и если да, то какая, NVidia? Сколько видеопотоков одновременно?

Вообще планируется 8 потоков, 8 камер. Про gpu не знаю, но скорее всего нет.

C>Нужно смотреть загрузку CPU. Ежели всё устраивает, дык и ладно. С GPU свои заморочки есть (с ограничением экземпляров кодирования на процесс).

C>Decodebin у тебя d3d11h264dec выбирал, он же, вроде, hardware использует, значит, условия соответствуют. Выбор осуществляется из элементов, которые могут работать в данных условиях, элемента с максимальным рангом.
C>https://developer.ridgerun.com/wiki/index.php?title=GStreamer_modify_the_elements_rank

Ок, изучу вопрос.

S>>Не до конца понимаю, почему простой варинат filesrc ! queue ! h264parse ! appsink не сработал...

C>А декодировать h264 кто будет в этом пайплайне? А сейчас у тебя этим avdec занимается.

Ну вот я не очень в предметной области разбираюсь, а зачем тогда h264parse нужен? Сразу декодировать нельзя?

S>>Методом тыка что-то заработало.


S>>Смущает несколько моментов:


S>>1)код saveimg имеет такую строчку

S>>var neededFrame = Global.VideoConvertSample(sample, new Caps("image/jpeg"), Constants.MSECOND * 100);
S>>и что-то первое время по таймауту во время отладки падало, пришлось увеличить. Сейчас откатил как выше, вроде нормально, но что это было??
C>Где-то чего-то на что-то наложилось, другой ответ мне сложно дать. А тебе и в боевой работе изображения надо будет так же сохранять? Или с ними ещё что-то делать? Там же просто плагины разные есть, может быть можно и без доп.кода обойтись. Ну и, на всякий случай, выходной формат на уровне пайплайна можно разный запросить (с помощью videconvert).

Да, надо будет сохранять. jpegenc я смотрел, возможно я вернусь к нему. Но кажется, что VideoConvertSample и jpenenc
это одно и тоже. Т.е. на первый взгляд, особой разницы нету.

S>>2) сыпятся такие сообщения

S>>0:00:11.961293800 30572 000002232259B7E0 WARN basesrc gstbasesrc.c:3693:gst_base_src_start_complete:<filesrc> pad not activated yet
S>>0:00:11.963705700 30572 000002232218CF00 WARN qtdemux qtdemux.c:3245:qtdemux_parse_trex:<qtdemux> failed to find fragment defaults for stream 1
S>>Что с этим делать?
C>Дык, видимо, не раскочегарилось ещё. У тебя readerPipe.SetState(State.Playing) GST_STATE_CHANGE_ASYNC возвращает? А в лог плюётся во время PullSample()? Не хочешь GetState'ом подождать завершения изменения состояния? Оно как часто эти сообщения выдаёт?

Попробую, благодарю.
Re[15]: Относительно твоих вопросов в рассылке gstreamer'а
Здравствуйте, Conductor, Вы писали:

S>>Кажется, что такое на коленке собрал по образу и подобию, но не уверен, что все правильно и оптимально:

C>У тебя видеокарта на боевых машинах предполагается, и если да, то какая, NVidia? Сколько видеопотоков одновременно?

Вообще планируется 8 потоков, 8 камер. Про gpu не знаю, но скорее всего нет.

C>Нужно смотреть загрузку CPU. Ежели всё устраивает, дык и ладно. С GPU свои заморочки есть (с ограничением экземпляров кодирования на процесс).

C>Decodebin у тебя d3d11h264dec выбирал, он же, вроде, hardware использует, значит, условия соответствуют. Выбор осуществляется из элементов, которые могут работать в данных условиях, элемента с максимальным рангом.
C>https://developer.ridgerun.com/wiki/index.php?title=GStreamer_modify_the_elements_rank

Ок, изучу вопрос.

S>>Не до конца понимаю, почему простой варинат filesrc ! queue ! h264parse ! appsink не сработал...

C>А декодировать h264 кто будет в этом пайплайне? А сейчас у тебя этим avdec занимается.

Ну вот я не очень в предметной области разбираюсь, а зачем тогда h264parse нужен? Сразу декодировать нельзя?

S>>Методом тыка что-то заработало.


S>>Смущает несколько моментов:


S>>1)код saveimg имеет такую строчку

S>>var neededFrame = Global.VideoConvertSample(sample, new Caps("image/jpeg"), Constants.MSECOND * 100);
S>>и что-то первое время по таймауту во время отладки падало, пришлось увеличить. Сейчас откатил как выше, вроде нормально, но что это было??
C>Где-то чего-то на что-то наложилось, другой ответ мне сложно дать. А тебе и в боевой работе изображения надо будет так же сохранять? Или с ними ещё что-то делать? Там же просто плагины разные есть, может быть можно и без доп.кода обойтись. Ну и, на всякий случай, выходной формат на уровне пайплайна можно разный запросить (с помощью videconvert).

Да, надо будет сохранять. jpegenc я смотрел, возможно я вернусь к нему. Но кажется, что VideoConvertSample и jpenenc
это одно и тоже. Т.е. на первый взгляд, особой разницы нету. Я смотрел по исходникам VideoConvertSample и том строит
некий пайплайн, который, чую я, крайне похож на jpegenc. В коде я уже знаю номер интересного мне кадра, и мне нужно получить только его.
В случае использования jpegenc (... ! jpegenc ! appsink), это будет прогоняться для всех кадров, соотв. лишние накладные расходы.

S>>2) сыпятся такие сообщения

S>>0:00:11.961293800 30572 000002232259B7E0 WARN basesrc gstbasesrc.c:3693:gst_base_src_start_complete:<filesrc> pad not activated yet
S>>0:00:11.963705700 30572 000002232218CF00 WARN qtdemux qtdemux.c:3245:qtdemux_parse_trex:<qtdemux> failed to find fragment defaults for stream 1
S>>Что с этим делать?
C>Дык, видимо, не раскочегарилось ещё. У тебя readerPipe.SetState(State.Playing) GST_STATE_CHANGE_ASYNC возвращает? А в лог плюётся во время PullSample()? Не хочешь GetState'ом подождать завершения изменения состояния? Оно как часто эти сообщения выдаёт?

Попробую, благодарю.