Здравствуйте, Conductor, Вы писали:
C>Правильно ли я понял: результирующий файл должен содержать 4 синхронизированных видеопотока и при воспроизведении они должны отображаться синхронно ("решётка" или на отдельных экранах), так?
да именно так
скажите пожалуйста а вам приходилось записывать mp4 используя gstreame одним файлом 4-5 часов подряд
я тоже думаю что на текущей работе меня уволят как только сделапю то что им срочно нужно
поэтому ищу новую работу
Здравствуйте, sergey2b, Вы писали:
S>скажите пожалуйста а вы используйте cerbero на операционной системе или в докере
Я стараюсь то, что можно, по максимуму в контейнеры распихать, особенно сборку third party. Но в нашем случае для этих целей плюшки докера особо не нужны и поэтому исторически сложилось, что используется LXC, в том числе и для cerbero.
Re[30]: Относительно твоих вопросов в рассылке gstreamer'а
Здравствуйте, sergey2b, Вы писали:
S>Здравствуйте, Conductor, Вы писали:
C>>Правильно ли я понял: результирующий файл должен содержать 4 синхронизированных видеопотока и при воспроизведении они должны отображаться синхронно ("решётка" или на отдельных экранах), так?
S>да именно так
Ну, пайплайн-то накидать для этого варианта можно и не так сложно. Другой вопрос, что, на мой взгляд, будет минимум 2 проблемы:
1. Где именно окажется bottleneck и как его обойти;
2. Вопрос синхронизации: ежели можно принять концепцию "то, что сейчас имеется для записи, и является текущим", то — хорошо (повторюсь, для нас, например, такой вариант приемлем), а вот если нужно брать за базу значения времени камер (то, над чем Антон бьётся), то тут, конечно, забавы будет достаточно.
S>скажите пожалуйста а вам приходилось записывать mp4 используя gstreame одним файлом 4-5 часов подряд
4-5 — нет, у нас сложилось, что используются часовые фрагменты. Кстати, в gstreamer 1.16.1 баг был, что максимальный размер записанного файла 2 GB (если память мне не изменяет). А потом процесс как бы шёл (ошибка не выдавалась), но реальной записи не было. На эти грабли мы наступили, весело было.
S>я тоже думаю что на текущей работе меня уволят как только сделапю то что им срочно нужно
Уволить-то дело не хитрое, но, как грится, есть нюанс: а поддерживать разработанное решение (особенно на первых порах) им Пушкин будет или кто? Не, каждый, безусловно, кузнец своего НЕсчастья, но с их стороны будет абсолютным идиотизмом полностью рвать отношения. Может, кстати, имеет смысл целенаправленно усложнить им вопросы сопровождения?
S>поэтому ищу новую работу
Здравствуйте, Conductor, Вы писали:
C>Здравствуйте, sergey2b, Вы писали:
S>>скажите пожалуйста а вы используйте cerbero на операционной системе или в докере
C>Я стараюсь то, что можно, по максимуму в контейнеры распихать, особенно сборку third party. Но в нашем случае для этих целей плюшки докера особо не нужны и поэтому исторически сложилось, что используется LXC, в том числе и для cerbero.
я пытался собрать эти контейнеры у меня не получилось
различные ошибки при сборки часть я исправил
Linux Setup
On Linux, you will only need a distribution with python >= 3.6. Cerbero will use your package manager to install all other required packages during bootstrap.
там проблем быть не должно.
А, вспомнил нюанс: они начиная с 1.20 многое переделали (сейчас уже не помню, с репами вроде что-то), я, когда вопрос изучал, это для себя отметил, и мы, собственно, тогда и приняли решение на 1.20 перейти, потому что процесс сборки простой получился.
у нас базовая ОС ubuntu 20.04
поэтому пришлось использовать последний docker-gstreamer поддерживающий ubuntu 20.04 docker-gstreamer-2020-12-30T23-16-11Z
superuser@xxx:~/Documents/docker-gstreamer-2020-12-30T23-16-11Z$ ./build-release.sh 1.20
20.04: Pulling from library/ubuntu
Digest: sha256:33a5cc25d22c45900796a1aca487ad7a7cb09f09ea00b779e3b2026b4fc2faba
Status: Image is up to date for ubuntu:20.04
docker.io/library/ubuntu:20.04
[+] Building 0.2s (8/8) FINISHED docker:default
=> [internal] load build definition from Dockerfile-dev-dependencies 0.0s
=> => transferring dockerfile: 155B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:20.04 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 2.35kB 0.0s
=> [1/3] FROM docker.io/library/ubuntu:20.04 0.0s
=> CACHED [2/3] COPY docker/build-gstreamer/install-dependencies / 0.0s
=> CACHED [3/3] RUN ["/install-dependencies"] 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:18b452a3f3e92ea0fb1d5e21ad275eab3dc0e803917d6a3dcd6ccaf2d7685040 0.0s
=> => naming to docker.io/restreamio/gstreamer:dev-dependencies 0.0s
[+] Building 163.8s (7/8) docker:default
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile-dev-downloaded 0.0s
=> => transferring dockerfile: 1.37kB 0.0s
=> [internal] load metadata for docker.io/restreamio/gstreamer:dev-dependencies 0.0s
=> [1/4] FROM docker.io/restreamio/gstreamer:dev-dependencies 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 3.60kB 0.0s
=> CACHED [2/4] COPY docker/build-gstreamer/download / 0.0s
=> ERROR [3/4] RUN ["/download"] 163.7s
------
> [3/4] RUN ["/download"]:
0.289 Cloning into 'gstreamer'...
132.2 /gstreamer /
133.6 Switched to a new branch '1.20'
133.6 Branch '1.20' set up to track remote branch '1.20' from 'origin'.
133.6 /
133.6 Cloning into 'libnice'...
138.5 /libnice /
138.5 Note: switching to '1dbe38d6abe74c415bf4ae44190980c61874a04f'.
138.5
138.5 You are in 'detached HEAD' state. You can look around, make experimental
138.5 changes and commit them, and you can discard any commits you make in this
138.5 state without impacting any branches by switching back to a branch.
138.5
138.5 If you want to create a new branch to retain commits you create, you may
138.5 do so (now or later) by using -c with the switch command. Example:
138.5
138.5 git switch -c <new-branch-name>
138.5
138.5 Or undo this operation with:
138.5
138.5 git switch -
138.5
138.5 Turn off this advice by setting config variable advice.detachedHead to false
138.5
138.5 HEAD is now at 1dbe38d test-fallback: fix stack buffer overflow with new candidate API
138.5 /
138.5 Cloning into 'gst-plugins-base'...
162.2 /gst-plugins-base /
162.2 error: pathspec '1.20' did not match any file(s) known to git
------
Dockerfile-dev-downloaded:30
--------------------
28 | COPY docker/build-gstreamer/download /
29 |
30 | >>> RUN ["/download"]
31 |
32 | COPY docker/build-gstreamer/compile /
--------------------
ERROR: failed to solve: process "/download" did not complete successfully: exit code: 1
и последней версией
superuser@xxx:~/Documents/docker-gstreamer-2020-12-30T23-16-11Z$ ./build-release.sh 1.22.5
20.04: Pulling from library/ubuntu
Digest: sha256:33a5cc25d22c45900796a1aca487ad7a7cb09f09ea00b779e3b2026b4fc2faba
Status: Image is up to date for ubuntu:20.04
docker.io/library/ubuntu:20.04
[+] Building 0.2s (8/8) FINISHED docker:default
=> [internal] load build definition from Dockerfile-dev-dependencies 0.0s
=> => transferring dockerfile: 155B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:20.04 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 2.35kB 0.0s
=> [1/3] FROM docker.io/library/ubuntu:20.04 0.0s
=> CACHED [2/3] COPY docker/build-gstreamer/install-dependencies / 0.0s
=> CACHED [3/3] RUN ["/install-dependencies"] 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:18b452a3f3e92ea0fb1d5e21ad275eab3dc0e803917d6a3dcd6ccaf2d7685040 0.0s
=> => naming to docker.io/restreamio/gstreamer:dev-dependencies 0.0s
[+] Building 165.9s (7/8) docker:default
=> [internal] load build definition from Dockerfile-dev-downloaded 0.0s
=> => transferring dockerfile: 1.37kB 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/restreamio/gstreamer:dev-dependencies 0.0s
=> [1/4] FROM docker.io/restreamio/gstreamer:dev-dependencies 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 3.60kB 0.0s
=> CACHED [2/4] COPY docker/build-gstreamer/download / 0.0s
=> ERROR [3/4] RUN ["/download"] 165.8s
------
> [3/4] RUN ["/download"]:
0.242 Cloning into 'gstreamer'...
136.5 /gstreamer /
137.8 Note: switching to '1.22.5'.
137.8
137.8 You are in 'detached HEAD' state. You can look around, make experimental
137.8 changes and commit them, and you can discard any commits you make in this
137.8 state without impacting any branches by switching back to a branch.
137.8
137.8 If you want to create a new branch to retain commits you create, you may
137.8 do so (now or later) by using -c with the switch command. Example:
137.8
137.8 git switch -c <new-branch-name>
137.8
137.8 Or undo this operation with:
137.8
137.8 git switch -
137.8
137.8 Turn off this advice by setting config variable advice.detachedHead to false
137.8
137.8 HEAD is now at bf6ce1d64a Release 1.22.5
137.8 /
137.8 Cloning into 'libnice'...
140.3 /libnice /
140.3 Note: switching to '1dbe38d6abe74c415bf4ae44190980c61874a04f'.
140.3
140.3 You are in 'detached HEAD' state. You can look around, make experimental
140.3 changes and commit them, and you can discard any commits you make in this
140.3 state without impacting any branches by switching back to a branch.
140.3
140.3 If you want to create a new branch to retain commits you create, you may
140.3 do so (now or later) by using -c with the switch command. Example:
140.3
140.3 git switch -c <new-branch-name>
140.3
140.3 Or undo this operation with:
140.3
140.3 git switch -
140.3
140.3 Turn off this advice by setting config variable advice.detachedHead to false
140.3
140.3 HEAD is now at 1dbe38d test-fallback: fix stack buffer overflow with new candidate API
140.3 /
140.3 Cloning into 'gst-plugins-base'...
164.3 /gst-plugins-base /
164.3 error: pathspec '1.22.5' did not match any file(s) known to git
------
Dockerfile-dev-downloaded:30
--------------------
28 | COPY docker/build-gstreamer/download /
29 |
30 | >>> RUN ["/download"]
31 |
32 | COPY docker/build-gstreamer/compile /
--------------------
ERROR: failed to solve: process "/download" did not complete successfully: exit code: 1
Здравствуйте, sergey2b, Вы писали:
S>Здравствуйте, Conductor, Вы писали:
S>у нас базовая ОС ubuntu 20.04 S>поэтому пришлось использовать последний docker-gstreamer поддерживающий ubuntu 20.04 docker-gstreamer-2020-12-30T23-16-11Z
S>может вы сталкивались с такой ошибкой
2. Не принципиально, но 1.20 — это бранч, я tags использую (типа 1.20.6).
3. Как видно из логов, ошибка возникает при попытке переключиться на бранч/tag в gst-plugins-base и понятно почему: нет его там. И опять же понятно почему его там нет (я же писал об этом):
GStreamer 1.20 Release Notes
Development in GitLab was switched to a single git repository containing all the modules
Ты не хочешь собственный docker-контейнер замастрячить: типа, взять за основу убунтовый требуемой версии, поставить там питон (если нет его там), а дальше нехай cerbero работает — его для того и делали. Не думаю, что это будет сложно.
Здравствуйте, reversecode, Вы писали:
R>а некоторым не важно что это сумер мега новый инновационные не имещий аналогов продукт построенные на основе gstreamera
Вот есть libav который много где работает с аппаратным ускорением, и на армах, и на "интелах". Мне прямо интересно, а что вместо него использовать, чтобы оно и кодировало/декодировало, а ещё и с 0 копированием на дисплей выводило, да не в своё окно, а как текстурой в GLES?
Здравствуйте, reversecode, Вы писали:
R>libav это тот который форк отщипенцами из ffmpeg и который умер и уже больше двух лет не обновляется?
Хорошо, давай по-другому. Вот есть ffmpeg... и далее по списку вопросов выше...
немного не понятно к чему вы ведете
но давайте тыпа догадаюсь
я знаю продукты которые писали это все с нуля для себя то о чем вы говорите
в опен сорсе этого нет
в чем это вышло круче чем те кто тупо подключил очередной libav/libffmpeg ?
вышло более компактно
и с точки зрения маркетинга "более привлекательнее"
чем то как я упомянул в посте на который вы ответили
переводя на совсем протой язык
кто может делает
кто не может берет готовое
Здравствуйте, reversecode, Вы писали:
R>и с точки зрения маркетинга "более привлекательнее"
Специализированные решения буду ещё и более оптимальны и быстрее, но это уже заточка под архитектуру. R>чем то как я упомянул в посте на который вы ответили
Я пытаюсь понять в чём профит взять условный NVIDIA SDK, своять на нём и получить что-то что работает только на NVIDIA, но не на АМД и интел. С другой стороны, берётся ffmpeg и почти не меняя кода у нас есть поддержка nvidia, amd, mali, intel через тот же vaapi там, куда ffmpeg портирован, а портирован он много куда. R>кто может делает R>кто не может берет готовое
Но можно пересобрать ffmpeg без того что не нужно и он будет компактнее.
Здравствуйте, Kernan, Вы писали:
K>Здравствуйте, reversecode, Вы писали:
R>>и с точки зрения маркетинга "более привлекательнее" K>Специализированные решения буду ещё и более оптимальны и быстрее, но это уже заточка под архитектуру.
R>>чем то как я упомянул в посте на который вы ответили K>Я пытаюсь понять в чём профит взять условный NVIDIA SDK, своять на нём и получить что-то что работает только на NVIDIA, но не на АМД и интел. С другой стороны, берётся ffmpeg и почти не меняя кода у нас есть поддержка nvidia, amd, mali, intel через тот же vaapi там, куда ffmpeg портирован, а портирован он много куда.
рассматривается кейс некоего транскодинга ?
если да, то условный ffmpeg может не покрывает сложных кейсов с кастомными настройками, некими другими функциями которых не вытянули в ffmpeg или багами в имплементации самого ffmpeg
амд кстати почему то многие уже забросили
intel с ваапи так себе, и он же квиксинк
nvidia набер ван по моим наблюжениям
с мали не сталкивался, но это скорее всего мобаил и делается это несколько по другому через интерфес который предоставляет сама ява андроида
или разве что какойто ембеддед без андроида
R>>кто может делает R>>кто не может берет готовое K>Но можно пересобрать ffmpeg без того что не нужно и он будет компактнее.
не будет
и вопрос не только в размере
а в том что в таких решенях разработчик хочет контроллировать максимальный контролфлов
а беря некий ffmpeg он зкрывает глаза и считает что там все ок
к примеру
одно дело когда имеешь доступ к апи к примеру нвидиии
а другое дело когда ты имеешь дело с прослойкой ffmpeg к апи нвидии
если ваш кейс покрывается полностью интерфейсом либ ffmpeg
и что внутри вам не надо знать, то да, вам подходит
а другим очевидно нет
Здравствуйте, reversecode, Вы писали:
R>рассматривается кейс некоего транскодинга ?
Рассматривается кейз когда надо что-то декодировать, рескейлить и отобразить на экране, желательно с аппаратным ускорением попробовав 2-3 интерфейса, а если поддержки нет, то откатиться до программного. В промежутке, ещё и в контейнер сохранить, а потом и в сеть отправить. NVIDIA API такое поддерживает, а Intel? R>амд кстати почему то многие уже забросили
Да-да... все прямо и забили... R>intel с ваапи так себе, и он же квиксинк
Ну хер знает https://github.com/intel/media-driver R>nvidia набер ван по моим наблюдениям
В разных сегментах своё. Где nvidia, где интел, где АРМ с мали, где тот же интел и амд как встройки в проц. Напридумывали столько, что охренеть. Завтра вообще на рокчипе будут железки и там надо будет запустить. R>с мали не сталкивался, но это скорее всего мобаил и делается это несколько по другому через интерфес который предоставляет сама ява андроида R>или разве что какойто ембеддед без андроида
И с андройдом тоже используют ffmpeg как бэкенд для медии. Прикинь! Просто до чёрта кода написано на этой базе. R>не будет
А ты пробовал? R>а другое дело когда ты имеешь дело с прослойкой ffmpeg к апи нвидии
А можешь написать что нужно такого вот экзотического? R>а другим очевидно нет
Большинству, скорее всего, не нужно.
мы в разных сферах и меряемся пипьсами разных фаун
у слона и муравья они очевидно разные
так что невижу смысла
единственное что я забыл
это всякие бонгакам сайтики где нужно стримить женские пиписьки
а это иногда те же самые обычные PC
в которых и интелл и амд
но в контексте сервер сайда они умерли
Здравствуйте, reversecode, Вы писали:
R>мы в разных сферах и меряемся пипьсами разных фаун R>у слона и муравья они очевидно разные
Обожжжи... но у кого, по итогу, больше? R>но в контексте сервер сайда они умерли
Там сейчас виртуальные GPU рулить начинают, а это нвидлиа и лицензия, наверное, в таком случае SDK лучше всего, но если есть варианты...
164.4 Need to get 148 MB of archives.
164.4 After this operation, 562 MB of additional disk space will be used.
164.4 Do you want to continue? [Y/n] Abort.
164.4 Traceback (most recent call last):
Привет.
S>но когда я полпытался сделать dockerfile столкнулся с такой проблеммой S>оргинальный файл не мой но я его творчески слегка изменил
S>Dockerfile:39 S>-------------------- S> 37 | # hack: to pass "-y" argument to apt-get install launched by "cerbero bootstrap" S> 38 | RUN sed -i 's/apt-get install/apt-get install -y/g' ./cerbero/bootstrap/linux.py S> 39 | >>> RUN ./cerbero-uninstalled bootstrap S> 40 | #RUN ./cerbero-uninstalled bootstrap \ S> 41 | # && ./cerbero-uninstalled build glib \ S>-------------------- S>ERROR: failed to solve: process "/bin/sh -c ./cerbero-uninstalled bootstrap" did not complete successfully: exit code: 1
S>я не смог найти как подставит N
S>164.4 Need to get 148 MB of archives. S>164.4 After this operation, 562 MB of additional disk space will be used. S>164.4 Do you want to continue? [Y/n] Abort. S>164.4 Traceback (most recent call last):
1. Я не понял: почему ты пытался поставить N, почему ты не хочешь поставить Y? Как он будет работать, если не установлены требуемые ему пакеты?
2. У тебя же вот это обламывается, потому что там -y нет, почему там её нет — отдельный вопрос:
(Ктати, похоже, что твой оригинальный файл довольно старый, потому что, судя по содержимому ./cerbero/bootstrap/linux.py, вот это "RUN sed -i 's/apt-get install/apt-get install -y/g' ./cerbero/bootstrap/linux.py" уже не требуется.)