Re[9]: Относительно твоих вопросов в рассылке gstreamer'а
От: Conductor СССР  
Дата: 10.08.23 15:48
Оценка: 12 (1)
Здравствуйте, Sharov, Вы писали:

S>>>Вот если Paused, то не виснет. Правда пишет после

S>>>

S>>>** WARNING **: 13:07:57.677: Changing the `location' property on filesrc when a file is open is not supported.

S>>>и по сути работает с одним файлом (самым первым), т.е. читать будет только из него.
C>>Ну вот, а теперь, дождавшись того, что он перешёл в Paused, если его в Null перевести, зависнет?

S>Тоже самое. Собственно, если автомат состояний у них так и работает -- в Null через Paused,

S>соотв. что так что так результат одинаков. Виснет на SetState(Null).
Сдаётся мне, что в paused пайплайн у тебя так и не переходит. ::gst_element_set_state(m_pipeline, GST_STATE_PAUSED) возвращает GST_STATE_CHANGE_ASYNC, в отличии от GST_STATE_NULL, установка которого GST_STATE_CHANGE_ASYNC никогда не возвращает. И, предполагаю, что если ты после установки Paused запросишь state, то у тебя и на этом вызове повиснет, потому что в шарповом свойстве на get скорее всего используется что-то вроде ::gst_element_get_state(m_pipeline, &state, &pending, GST_CLOCK_TIME_NONE).
Автомат автоматом, но ведь по логам что получается: элементы паплайна переходят в новое состояние, но пока всё не встало кто-то еще работает и в результате заканчиваются буфера. Почему, собственно, я и подумал, что если у тебя он Paused успешно перейдёт, то и в Null потом сможет перейти.
Попробовал я под виндой — то же самое, не виснет. С разными файлами по разрешению и форматам, с задержками и без.
Отличия: 1. использование в плюсовом коде (фактически, сишном), не думаю, что это принципиально; 2. версия 1.20.6 (mingw), а не 1.22, как у тебя, здесь сказать ничего не могу, т.к. не смотрел, чего они там при переходе к 1.22 понаизменяли.

S>Выше код приложил. Может что-то не так с параметрами appsink?

Можно, конечно, попробовать с appSink["sync"] = true, но боюсь, что не поможет.
Отредактировано 10.08.2023 15:51 Conductor . Предыдущая версия .
Re[10]: Относительно твоих вопросов в рассылке gstreamer'а
От: Sharov Россия  
Дата: 10.08.23 19:59
Оценка:
Здравствуйте, Conductor, Вы писали:

C>Здравствуйте, Sharov, Вы писали:


S>>>>Вот если Paused, то не виснет. Правда пишет после

S>>>>

S>>>>** WARNING **: 13:07:57.677: Changing the `location' property on filesrc when a file is open is not supported.

S>>>>и по сути работает с одним файлом (самым первым), т.е. читать будет только из него.
C>>>Ну вот, а теперь, дождавшись того, что он перешёл в Paused, если его в Null перевести, зависнет?

S>>Тоже самое. Собственно, если автомат состояний у них так и работает -- в Null через Paused,

S>>соотв. что так что так результат одинаков. Виснет на SetState(Null).
C>Сдаётся мне, что в paused пайплайн у тебя так и не переходит. ::gst_element_set_state(m_pipeline, GST_STATE_PAUSED) возвращает GST_STATE_CHANGE_ASYNC, в отличии от GST_STATE_NULL, установка которого GST_STATE_CHANGE_ASYNC никогда не возвращает. И, предполагаю, что если ты после установки Paused запросишь state, то у тебя и на этом вызове повиснет, потому что в шарповом свойстве на get скорее всего используется что-то вроде ::gst_element_get_state(m_pipeline, &state, &pending, GST_CLOCK_TIME_NONE).
C>Автомат автоматом, но ведь по логам что получается: элементы паплайна переходят в новое состояние, но пока всё не встало кто-то еще работает и в результате заканчиваются буфера. Почему, собственно, я и подумал, что если у тебя он Paused успешно перейдёт, то и в Null потом сможет перейти.

И как побороть, а главное понять почему он там еще работает? Какой это может быть компонент?

Кстати, попробовал :

fileSrc.Unlink(decodebin);
var temp = readerPipe.SetState(State.Paused);
readerPipe.GetState(out State state, out State pending, Gst.Constants.MSECOND * 1000);
readerPipe.SetState(State.Null);
fileSrc.Link(decodebin);

Работает через раз, т.е. один файл проходит, а на втором стоп, и работает нестабильно, может и на первом файле
зависнуть.

C>Попробовал я под виндой — то же самое, не виснет. С разными файлами по разрешению и форматам, с задержками и без.

C>Отличия: 1. использование в плюсовом коде (фактически, сишном), не думаю, что это принципиально; 2. версия 1.20.6 (mingw), а не 1.22, как у тебя, здесь сказать ничего не могу, т.к. не смотрел, чего они там при переходе к 1.22 понаизменяли.

Попробую на этой версии.
Кодом людям нужно помогать!
Re[10]: Относительно твоих вопросов в рассылке gstreamer'а
От: Sharov Россия  
Дата: 10.08.23 20:08
Оценка:
Здравствуйте, Conductor, Вы писали:

Подумалось -- а может не использовать decodebin, может попробовать руками собрать все соотв. компоненты, которые он
использует?
Кодом людям нужно помогать!
Re[11]: Относительно твоих вопросов в рассылке gstreamer'а
От: Conductor СССР  
Дата: 10.08.23 20:18
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте, Conductor, Вы писали:


S>Подумалось -- а может не использовать decodebin, может попробовать руками собрать все соотв. компоненты, которые он

S>использует?

Это, само-собой, неплохой вариант, особенно если у тебя все файлы однотипные.
Re[11]: Относительно твоих вопросов в рассылке gstreamer'а
От: Conductor СССР  
Дата: 10.08.23 20:27
Оценка:
Здравствуйте, Sharov, Вы писали:

S>И как побороть, а главное понять почему он там еще работает? Какой это может быть компонент?


Ну он же тебе в логах говорит про d3d11bufferpool2, явно намекая на d3d11. Визуализировать сформированный decodebin'ом пайплайн не хочешь? Думаю, что и прояснится многое и, если сам будешь формировать (о чём ты в следующем сообщении пишешь), поможет. И если явно будет виден пул как элемент, то тогда можно будет ему max_buffers выставить.

S>Кстати, попробовал :


S> fileSrc.Unlink(decodebin);

S> var temp = readerPipe.SetState(State.Paused);
S> readerPipe.GetState(out State state, out State pending, Gst.Constants.MSECOND * 1000);
S> readerPipe.SetState(State.Null);
S> fileSrc.Link(decodebin);

S>Работает через раз, т.е. один файл проходит, а на втором стоп, и работает нестабильно, может и на первом файле

S>зависнуть.

И оно у тебя в логах не вопит, что отцепляешь элемент у работающего (playing) пайплайна?
Re[11]: Относительно твоих вопросов в рассылке gstreamer'а
От: Conductor СССР  
Дата: 10.08.23 21:08
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Подумалось -- а может не использовать decodebin, может попробовать руками собрать все соотв. компоненты, которые он

S>использует?

Кстати, ты Gst.Parse.Launch по принципиальным соображениям не используешь или просто руки до него не дошли?
Re[12]: Относительно твоих вопросов в рассылке gstreamer'а
От: Sharov Россия  
Дата: 10.08.23 21:27
Оценка:
Здравствуйте, Conductor, Вы писали:

S>>Подумалось -- а может не использовать decodebin, может попробовать руками собрать все соотв. компоненты, которые он

S>>использует?
C>Кстати, ты Gst.Parse.Launch по принципиальным соображениям не используешь или просто руки до него не дошли?

Мне казалось, что если необходимо гибкое настраиваемое решение, то надо руками все собирать -- линковать,
добавлять пробы. А launch -- коробочный пайплайн для классических сценариев. Т.е. в случае launch контроля меньше.
Кодом людям нужно помогать!
Re[12]: Относительно твоих вопросов в рассылке gstreamer'а
От: Sharov Россия  
Дата: 10.08.23 22:09
Оценка:
Здравствуйте, Conductor, Вы писали:

S>>И как побороть, а главное понять почему он там еще работает? Какой это может быть компонент?

C>Ну он же тебе в логах говорит про d3d11bufferpool2, явно намекая на d3d11. Визуализировать сформированный decodebin'ом пайплайн не хочешь? Думаю, что и прояснится многое и, если сам будешь формировать (о чём ты в следующем сообщении пишешь), поможет. И если явно будет виден пул как элемент, то тогда можно будет ему max_buffers выставить.

http://files.rsdn.org/79401/graphviz.svg
Кодом людям нужно помогать!
Re[13]: Относительно твоих вопросов в рассылке gstreamer'а
От: Sharov Россия  
Дата: 11.08.23 10:07
Оценка:
Здравствуйте, Sharov, Вы писали:

S>>>И как побороть, а главное понять почему он там еще работает? Какой это может быть компонент?

C>>Ну он же тебе в логах говорит про d3d11bufferpool2, явно намекая на d3d11. Визуализировать сформированный decodebin'ом пайплайн не хочешь? Думаю, что и прояснится многое и, если сам будешь формировать (о чём ты в следующем сообщении пишешь), поможет. И если явно будет виден пул как элемент, то тогда можно будет ему max_buffers выставить.
S>http://files.rsdn.org/79401/graphviz.svg

Кажется, что такое на коленке собрал по образу и подобию, но не уверен, что все правильно и оптимально:
  код
        public static Pipeline BuildVideoReaderPipelineCustom()
        {
            // Build video reader pipeline

            var fileSrc = ElementFactory.Make("filesrc", "filesrc");
            if (fileSrc == null)
            {
                throw new ArgumentNullException(nameof(fileSrc));
            }
            
            var qtdemux = ElementFactory.Make("qtdemux", "qtdemux");
            if (qtdemux == null)
            {
                throw new ArgumentNullException(nameof(qtdemux));
            }


            var queue = ElementFactory.Make("queue", "queue");
            if (queue == null)
            {
                throw new ArgumentNullException(nameof(queue));
            }

            var h264parse = ElementFactory.Make("h264parse", "h264parse");
            if (h264parse == null)
            {
                throw new ArgumentNullException(nameof(h264parse));
            }

            var avdec = ElementFactory.Make("avdec_h264", "avdec_h264");
            if (avdec == null)
            {
                throw new ArgumentNullException(nameof(avdec));
            }


            var appSink = new AppSink("my_appsink");
            //appSink.NewSample += AppSink_NewSample;
            // appSink.EmitSignals = true;
            appSink["sync"] = true;

            h264parse.PadAdded += (o, args) =>
            {
                //args.Args[0] as 
                var appsinkPad = appSink.GetStaticPad("sink");

                if (appsinkPad.IsLinked)
                {
                    return;
                }

           
                args.NewPad.Link(appsinkPad);
            };

            fileSrc.PadAdded += (o, args) =>
            {
                //args.Args[0] as 
                var decPad = h264parse.GetStaticPad("sink");

                if (decPad.IsLinked)
                {
                    return;
                }

                args.NewPad.Link(decPad);
            };

            qtdemux.PadAdded += (o, args) =>
            {
                //args.Args[0] as 
                var qPad = queue.GetStaticPad("sink");

                if (qPad.IsLinked)
                {
                    return;
                }

                args.NewPad.Link(qPad);
            };

            var pipeline = new Pipeline("video reader pipe");
            pipeline.Add(fileSrc, qtdemux, queue, h264parse, avdec, appSink);


            var linkResult = Element.Link(fileSrc, qtdemux);
            linkResult = Element.Link(qtdemux, queue);
            linkResult = Element.Link(queue, h264parse);
            linkResult = Element.Link(h264parse, avdec);
            linkResult = Element.Link(avdec, appSink);

            return pipeline;
        }

        public static void SearchFrameByNumber(Pipeline readerPipe, IEnumerable<string> videoFiles, int frameNumber)
        {
            if (readerPipe == null) throw new ArgumentNullException(nameof(readerPipe));


            var fileSrc = readerPipe.GetByName("filesrc");

            var appSink = (AppSink) readerPipe.GetByName("my_appsink");
            readerPipe.SetName("frame_stepper");

           
            foreach (var videoFile in videoFiles)
            {
                fileSrc["location"] = videoFile;

                readerPipe.SetState(State.Playing);


                var step = 1; //fn тоже с 1 начинается
                while (step < frameNumber)
                {
                    var sample = appSink.PullSample();
                    var fn = $"{Path.GetFileNameWithoutExtension(videoFile)}_{step}.jpeg";
                    SaveImg(sample,Path.Combine("d:\\test_out\\",fn));
                    step++;
                }

                readerPipe.SetState(State.Ready);
                
            }
        }


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

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

1)код saveimg имеет такую строчку
var neededFrame = Global.VideoConvertSample(sample, new Caps("image/jpeg"), Constants.MSECOND * 100);
и что-то первое время по таймауту во время отладки падало, пришлось увеличить. Сейчас откатил как выше, вроде нормально, но что это было??

2) сыпятся такие сообщения
0:00:11.961293800 30572 000002232259B7E0 WARN basesrc gstbasesrc.c:3693:gst_base_src_start_complete:<filesrc> pad not activated yet
0:00:11.963705700 30572 000002232218CF00 WARN qtdemux qtdemux.c:3245:qtdemux_parse_trex:<qtdemux> failed to find fragment defaults for stream 1

Что с этим делать?
Кодом людям нужно помогать!
Re[14]: Относительно твоих вопросов в рассылке gstreamer'а
От: Conductor СССР  
Дата: 11.08.23 11:06
Оценка: 15 (1)
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте, Sharov, Вы писали:


S>>>>И как побороть, а главное понять почему он там еще работает? Какой это может быть компонент?

C>>>Ну он же тебе в логах говорит про d3d11bufferpool2, явно намекая на d3d11. Визуализировать сформированный decodebin'ом пайплайн не хочешь? Думаю, что и прояснится многое и, если сам будешь формировать (о чём ты в следующем сообщении пишешь), поможет. И если явно будет виден пул как элемент, то тогда можно будет ему max_buffers выставить.
S>>http://files.rsdn.org/79401/graphviz.svg

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


У тебя видеокарта на боевых машинах предполагается, и если да, то какая, NVidia? Сколько видеопотоков одновременно? Нужно смотреть загрузку CPU. Ежели всё устраивает, дык и ладно. С GPU свои заморочки есть (с ограничением экземпляров кодирования на процесс).
Decodebin у тебя d3d11h264dec выбирал, он же, вроде, hardware использует, значит, условия соответствуют. Выбор осуществляется из элементов, которые могут работать в данных условиях, элемента с максимальным рангом.

https://developer.ridgerun.com/wiki/index.php?title=GStreamer_modify_the_elements_rank

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


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

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


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


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

S>var neededFrame = Global.VideoConvertSample(sample, new Caps("image/jpeg"), Constants.MSECOND * 100);
S>и что-то первое время по таймауту во время отладки падало, пришлось увеличить. Сейчас откатил как выше, вроде нормально, но что это было??

Где-то чего-то на что-то наложилось, другой ответ мне сложно дать. А тебе и в боевой работе изображения надо будет так же сохранять? Или с ними ещё что-то делать? Там же просто плагины разные есть, может быть можно и без доп.кода обойтись. Ну и, на всякий случай, выходной формат на уровне пайплайна можно разный запросить (с помощью videconvert).

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>Что с этим делать?


Дык, видимо, не раскочегарилось ещё. У тебя readerPipe.SetState(State.Playing) GST_STATE_CHANGE_ASYNC возвращает? А в лог плюётся во время PullSample()? Не хочешь GetState'ом подождать завершения изменения состояния? Оно как часто эти сообщения выдаёт?
Re[13]: Относительно твоих вопросов в рассылке gstreamer'а
От: Conductor СССР  
Дата: 11.08.23 11:17
Оценка: 3 (1)
Здравствуйте, Sharov, Вы писали:

S>Мне казалось, что если необходимо гибкое настраиваемое решение, то надо руками все собирать -- линковать,

S>добавлять пробы. А launch -- коробочный пайплайн для классических сценариев. Т.е. в случае launch контроля меньше.

Ну, согласись, что decodebin, например, не очень способствует гибкости и настраиваемости решения.

Launch же просто по текстовому описанию формирует пайплайн, как напишешь — так и сформирует. А ежели ты элементам имена дашь, то потом запросто из сформированного паплайна получешь требуемый элемент по имени и делай с ним всё, что хочешь. Особенно при исследовании разных вариантов пайплайна удобно: каждый раз всё в коде переписывать — застрелиться, а с launch — текстовое описание изменил и всё.
Re[15]: Относительно твоих вопросов в рассылке gstreamer'а
От: Sharov Россия  
Дата: 13.08.23 21:30
Оценка:
Здравствуйте, 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'ом подождать завершения изменения состояния? Оно как часто эти сообщения выдаёт?

Попробую, благодарю.
Кодом людям нужно помогать!
Отредактировано 14.08.2023 8:13 Sharov . Предыдущая версия .
Re[16]: Относительно твоих вопросов в рассылке gstreamer'а
От: Conductor СССР  
Дата: 14.08.23 11:04
Оценка: 3 (1)
Здравствуйте, Sharov, Вы писали:

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


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


8 HD потоков? Что-то мне подсказывает, что gpu может понадобиться.

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

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

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


Ну, насколько я понимаю, парсер, грубо говоря, данные для декодера готовит, временем опять же заведует, запросы обрабатывает ("handles queries (POSITION/DURATION/SEEKING/FORMAT/CONVERT)"). Декодер что: ему сказали декодировать — он декодирует.

https://gstreamer.freedesktop.org/documentation/base/gstbaseparse.html?gi-language=c

Кроме того, декодеры для одного и того же формата могут быть разные, hard/soft. Да ты же и сам по меньшей мере с двумя уже дело имел для одного и того же видео (d3d11h264dec, avdec_h264). А есть ещё и nvh264dec, например...
Re: Есть специалисты по gstreamer'у?
От: reversecode google
Дата: 14.08.23 11:10
Оценка: 7 (1)
когда плясать с гстримером надоест вашему дателю
нанимаются прогеры и делается решение под себя
либо выбирается готовое что присутсвует на рынке

любопытно только, через какое время к этому прийдет ваш датель

я бы дал максимум полтора года от начала прод использования гстримера
Re[2]: Есть специалисты по gstreamer'у?
От: Sharov Россия  
Дата: 14.08.23 11:33
Оценка:
Здравствуйте, reversecode, Вы писали:

R>когда плясать с гстримером надоест вашему дателю

R>нанимаются прогеры и делается решение под себя
R>либо выбирается готовое что присутсвует на рынке

И на чем, в смысле библиотек, пилить это решение под себя?

R>любопытно только, через какое время к этому прийдет ваш датель

R>я бы дал максимум полтора года от начала прод использования гстримера

Чего так скептически? Был негативный опыт с gst?
Кодом людям нужно помогать!
Re[3]: Есть специалисты по gstreamer'у?
От: reversecode google
Дата: 14.08.23 12:16
Оценка: 7 (1)
пилятся исходя из бюджета
нет денег, хотим попробовать mvp — берут как вы gstreamer/ffmpeg/vlc итд

есть чуть чуть денег
на волю кодера любая либа, он сам выберет исходя из своего опыта что потянет

есть много денег
на честно порядочность кодера
может сказать что запилил свое с нуля, а внутри запихнет какое нибудь опенсорсное решение с гитхаба
либо опять же gstreamer/ffmpeg итд запихнет

либо реально запилит все с нуля

gstreamer это уровень, скрутил запустил, как то работает
да, некоторые ко умудряются занянуть его как либу/фреймворк
те же вон с хаха ру которые постоянно вак крутят
или во всяких месседжерах он как av либа интегрирован

но это уже про то как умеет продавать бизнесс
некоторым важно позицировать свой продукт как что то новое(и я такое увжаю и люблю обращать свое внимание)
а некоторым не важно что это сумер мега новый инновационные не имещий аналогов продукт построенные на основе gstreamera
а таким, пронюханого потребителя не купить, и они этого не понимают
Re[3]: Есть специалисты по gstreamer'у?
От: reversecode google
Дата: 14.08.23 12:44
Оценка:
если это решение как saas
когда потребителю должно быть до места что там под капотом
там начинается нагрузка на самих поддеживающих
такие mvp решения когда пользователи динамические
тяжело сопровождать
нужны как миниум пару devops шаровых которые будут постоянно следить и подкручивать подтюнивать на разные сложные кейсы новых юзерей
скрипты и прочая хрень
а с учетом того что это не все кейсы покрывает
то нужно будет держать под рукой еще и кодера который будет лезть в глубины того же gstreamera что бы разобраться

когда бизнессу(начальству сверху) это надоедает(а это около полтора года)
бизнесс либо переходит в этап выживания
либо он делает решительные шаги по улучшению этой модели
и выбора или чего то уже готового
либо написание своего, с расчетом уже продажи не только самого saas, но и продукта


так в какой нише и на каком этапе там сейчас вы с шефом?))
Re[2]: Еще пару вопросов
От: Sharov Россия  
Дата: 16.08.23 16:20
Оценка:
Здравствуйте, Conductor, Вы писали:

1) А каков жизненный цикл буффера, от src до sink'а, это что-то типа tcp\ip, когда каждый элемент(слой) добавляет
к буфферу какую-то конкретную инф-ию или как? Вот например на вход h264parse идет сырое видео из src, а что на выходе --
какой-то новый буффер или старый с какой-то инф-ей, пригодной для следующих эл-ов, типа, avdec_h264?

2) Как можно хранить метаинф-ию в mp4 файле для каждого фрейма, у меня был вопрос -- https://lists.freedesktop.org/archives/gstreamer-devel/2023-July/081587.html
Я не нашел как это можно сделать. Т.е. когда открою файл для чтения, например в цикле PullSample, как мне извлекать эту инф-ию?
Ответ выше по ссылке был не очень полезен...
Кодом людям нужно помогать!
Re[17]: Относительно твоих вопросов в рассылке gstreamer'а
От: Sharov Россия  
Дата: 16.08.23 16:50
Оценка:
Здравствуйте, Conductor, Вы писали:


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

C>8 HD потоков? Что-то мне подсказывает, что gpu может понадобиться.

Речь идет о (максимум) 8 rtsp потоках, которые надо в mp4 загнать. Неужели это так дорого по cpu?
Кодом людям нужно помогать!
Re[18]: Относительно твоих вопросов в рассылке gstreamer'а
От: Conductor СССР  
Дата: 16.08.23 19:33
Оценка: 2 (1) :)
Здравствуйте, Sharov, Вы писали:

S>Речь идет о (максимум) 8 rtsp потоках, которые надо в mp4 загнать. Неужели это так дорого по cpu?


Я же сказал "может понадобиться". С одной стороны тебе по rtsp h264 уже приходит, так что если ты на этой машине только записью файлов будешь заниматься, то, видимо, ресурсов хватит. А вот если на этой же машине нужно какие-то доп. операции делать, кодирование/декодирование, доп. обработка и т.д., то тогда могут быть вопросы. Ведь бывает же так, что в процессе выполнения работ требования меняются. Ведь бывает же так иногда
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.