После года разработки состоялся релиз GStreamer 1.22, кроссплатформенного набора компонентов для создания широкого спектра мультимедиа приложений, от медиаплееров и конвертеров аудио/видео файлов, до VoIP-приложений и систем потокового вещания. Код GStreamer распространяется под лицензией LGPLv2.1. Отдельно развиваются обновления плагинов gst-plugins-base, gst-plugins-good, gst-plugins-bad, gst-plugins-ugly, а также обвязка gst-libav и сервер потокового вещания gst-rtsp-server. На уровне API и ABI новый выпуск обратно совместим с веткой 1.0. Бинарные сборки в скором времени будут подготовлены для Android, iOS, macOS и Windows (в Linux рекомендуется использовать пакеты из дистрибутива)...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=58537
Классная штука, на rpi можно стримить свою хату в вк и прочее без всяких ваших этих.
Домашнее видео?
А в ffmpeg нельзя? Что мне не нраится в саабже, так это отлаживать, почему в нём что-то не работает опять. Например у меня в вайне
А в ffmpeg нельзя? Что мне не нравится в сабже, так это отлаживать, почему в нём что-то не работает опять. Например у меня в вайне не работают avc видосики и разбирайся как хочешь. Видосики в других форматах зависят от контейнера, и например aac дорожка звука может и работать, а может и нет. Кроме того, в самом gstreamer не работает vaapi и выяснить это можно только экспериментальным путём, отладочные логи не очень информативны и что делать дальше не понятно (но работает nvdec).
С вайном всё очень сложно. Первая рекомендация в таких случаях это накатить протоновские патчи от валвов - они очень много запилили всяких mediafoundation фиксов.> не работает vaapi
> но работает nvdecЭто взаимоисключающие понятия, поскольку нвидия не запиливала vaapi никогда. Если очень хочется оба, то надо ставить что-то такое https://github.com/elFarto/nvidia-vaapi-driver, старый на базе vdpau уже очень давно практически не работает.
А nvidia-vaapi-driver насколько работоспособный сейчас?
> А nvidia-vaapi-driver насколько работоспособный сейчас?В последний раз использовал полгода назад с RTX 2060, но тогда в firefox работало всё, кроме большого количества одновременно проигрывающихся AV1 видео - например, в какой-нибудь ленте комментариев на 9gag "гифки" могли зависнуть. Возможно уже пофиксили, но тогда я просто отключил AV1 в браузере.
Спасибо
Видимо, информация устарела. Работает в жырнолисе, с новой версией блоба только с новым режимом direct (разрабы сабжа сказали, что в драйвере поломано через egl). В mpv тоже работает вроде, но я проверил только h264.У gstreamer есть собственная поддержка nvdec, которая почему-то выключена в дистрибутивах. Выбор декодеров осуществляется переменной GST_PLUGIN_FEATURE_RANK, надо прописать
GST_PLUGIN_FEATURE_RANK=nvmpegvideodec:MAX,nvmpeg2videodec:MAX,nvmpeg4videodec:MAX,nvh264sldec:MAX,nvh264dec:MAX,nvjpegdec:MAX,nvh265sldec:MAX,nvh265dec:MAX,nvvp9dec:MAX,avdec_av1:MAX,av1dec:MAX
и тогда gstreamer воспроизводит файлы через них, как задать vaapi я не знаю.
У стримеров ОБС и всякие Твитч-студии.
>Обеспечена поставка плагинов на RustНеумолимая поступь.
ибо этот язык безопасен!
Точнее, безопастен.
как неуловимый Джо
А сами плагины написать так и не осилили. Ор дня.
К счастью, похоже что в команде гстримера нет экспертов опеннета, поэтому плагины на расте существуют (и их не мало): https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs
просто открыть сишный листинг и переписать без вдумчивости на другой язык любой дypак сможет
Ждём ядро линукса от Деанона на расте, фигня ведь вопрос
Всегда нравится когда opennet так лихо негодуют от rust.
Это всего лишь инструмент, не нравится ни пишите на этом языке.
От того что вы бухтите ничего не изменится. Только тратите свое и чужое время
Так вы ж сами ноете что надо писать всё на хрусте, определитесь уже ноете вы или ноете
не надо всё писать на "хрусте", тебя например, можно написать на баше
Помогите мне понять причину такого хейта Раста.Используется почти в каждой первой криптовалюте, в Файрфоксе, Ядре Линукс, в Хроме.
Думаете вышеперечисленные проекты ошиблись в выборе языка ?
> Qt6 .. GTK4 .. WebRTC .. языка RustВот это г-но-комбайн! Модно, молодёжно!
Чем тебе WebRTC не угодил? Критикуя - предлагай!
Я и гона на GTK с QT не понял.
А при чём тут Quick Time?
Слишком новые, слишком "модные", слишком "молодежные" то есть молодые. Надо подождать лет 5-10 и только потом делать их поддержку
Только через эти лета они сменят номер версии.
Вот, как раз, когда есть фронт-енды подо всё, что нужно, - это большое "хорошо".
> Отмечается, что 33% из изменений в новом GStreamer реализованы на RustGstreamer написан полностью на С а Rust не имеет никакого отношения к нему, не вводите людей в заблуждение. Биндинги и плагины на Rust это вообще отдельная тема.
Плагины по немногу переписываются, и это ОЧЕНЬ хорошо!
Намного выше стабильность и меньше сегфолтов (которых я ловил с С плагинами).Как тот кто разрабатывал приложения с GStreamer и Rust и даже немного контрибютил в GStreamer плагины на С, могу сказать что я бы не рискнул разрабатывать приложения на C. Там просто бесконечное количество способов выстрелить себе в разные части тела с самыми непредсказуемыми последствиями.
Логические ошибки Rust биндинги (которые в GStreamer без преувеличения офигенные) решает только частично, а вот работу с памятью практически на 100%.
Крайне редко приходилось использовать unsafe, в основном временно для создания биндингов того, что только что в master GStreamer-а добавили.На Rust GStreamer в ближайшем будущем никто не перепишет (хотя мейнтейнеры были бы только за), а вот новые плагины они рекомендуют писать и сами пишут именно на Rust, ибо так проще и надежнее.
> Там просто бесконечное количество способов выстрелить себе в разные части телакак в любом приложении где бесконечные выделение/освобождение памяти
> новые плагины они рекомендуют писать и сами пишут именно на Rust, ибо так проще и надежнее
по мне так gstreamer идеальный кандидат на переписывание, там все равно без нервов и веществ не разобраться
> как в любом приложении где бесконечные выделение/освобождение памятиНе совсем про gstreamer, потому что при работе с мультимедией постоянно дёргать память это гарантированный способ убить производительность, особенно в каком-нибудь аудиопотоке. Выделить память и почистить её недалеко от места выделения проще, чем выделить память один раз - потому что гарантированно про неё забываешь.
>> как в любом приложении где бесконечные выделение/освобождение памяти
> Не совсем про gstreamer, потому что при работе с мультимедией постоянно дёргать
> память это гарантированный способ убить производительность, особенно в каком-нибудь аудиопотоке.
> Выделить память и почистить её недалеко от места выделения проще, чем
> выделить память один раз - потому что гарантированно про неё забываешь.Да, там много где zero copy, и от этого управлять памятью ещё сложнее. Выделение буферов и освобождение не обязательно рядом, плюс они переиспользуются по возможности. Короче говоря, всё достаточно сложно и в плане именно управления памятью там очень легко накосячить.
>>> как в любом приложении где бесконечные выделение/освобождение памяти
>> Не совсем про gstreamer, потому что при работе с мультимедией постоянно дёргать
>> память это гарантированный способ убить производительность, особенно в каком-нибудь аудиопотоке.
>> Выделить память и почистить её недалеко от места выделения проще, чем
>> выделить память один раз - потому что гарантированно про неё забываешь.
> Да, там много где zero copy, и от этого управлять памятью ещё
> сложнее. Выделение буферов и освобождение не обязательно рядом, плюс они переиспользуются
> по возможности. Короче говоря, всё достаточно сложно и в плане именно
> управления памятью там очень легко накосячить.Rust биндинги как раз позволяют четко понимать в какой буфер можно только смотреть, какой можно модифицировать, а над каким есть полное владение в данном контексте с автоматическим освобождением если его дропнуть. Не знаю кем нужно быть чтобы не видеть в этом ценности при разработке как плагинов, так и приложений.
> Не совсем про gstreamer,я бы сказал - в особенности Gstreamer
> при работе с мультимедией постоянно дёргать память это гарантированный способ убить производительность
интересно - как вы представляете работу с видео без аллокаторов и экспорта импорта dmabuf между плагинами, хотя я не про это - на этапе инициализации плагинов и разбора GstCaps просто сплошные выделения/освобождения буферов под результаты.
> интересно - как вы представляете работу с видео без аллокаторов и экспорта
> импорта dmabuf между плагинами, хотя я не про это - на
> этапе инициализации плагинов и разбора GstCaps просто сплошные выделения/освобождения
> буферов под результаты.На этапе инициализации и выделяется\освобождается всё что надо. А вот при работе в рабочем потоке так делать не рекомендуется. Вообще не знаю GStreamer, но в том же эпловском CoreAudio и CoreVideo используются кольцевые буферы и прочие техники переиспользования существующей памяти для обеспечения высокой производительности и низкой задержки.
> кольцевые буферы и прочие техники переиспользования существующей памяти для обеспечения высокой производительностидля высокой производительности используется zero copy, кольцевой буфер это или список буферов роли не играет
> На этапе инициализации и выделяется\освобождается всё что надо
в Gstreamer тоже самое, но в процессе работы конвеера нужен обмен данными - экспорт и импорт буферов между разными плагинами и это абстрагируется аллокаторами - даунстрим обработал данные -> сообщил апстриму -> буфер вернулся в пул свободных, инплейс (взял данные из буфера -> обработал -> сохранил результат в тот же буфер) можно выполнить только примитивные задачи, в общем случае на входе и на выходе буферы разных размеров и у каждого свой аллокатор - на входе импорт на выходе экспорт. Недавно столкнулся с некорректной работой аллокатора v4l2 в плагине deinterlace - у него на входе один черезстрочный кадр а на выходе два с прогрессивной разверткой и пока не знаю как победить ошибку - буферы на выходе возвращаются синхронно с входм а должны в 2 раза чаще, как результат нехватка бкферов на выходе и остановка конвеера.
>по мне так gstreamer идеальный кандидат на переписывание,Размечтался.
>там все равно без нервов и веществ не разобраться
Лучше занимайся своими быдло-приложениями. Gstreamer не трожь.
> Добавлена возможность использования аппаратного ускорения кодирования и декодирования AV1 через API VAAPI/VA, AMF, D3D11, NVCODEC, QSV и Intel MediaSDK.прискорбно что развиваются чужеродные для Linux компоненты а для родного интерфейса (v4l2) плагины в заброшенном состоянии. Хотя тут не разработчики Gstreamer виноваты - производителям железа проще в юзерспейс наколхозить побыстрому чем разрабатывать ядерные API под строгим контролем и длительным временем согласования для принятия в майнстрим.
>Обновлены привязки для языка Rust. Добавлено 19 новых плагинов, эффектов и элементов, написанных на Rust (gst-plugins-rs). Отмечается, что 33% из изменений в новом GStreamer реализованы на RustКак же так? Ведь местные клоуны говорили что на rust ничего написать нельзя.
Понятно что они ничего не могут написать (и не только на rust), но зачем это на всех остальных людей проецировать?
> говорили что на rust ничего написать нельзясправедливости ради всё что написано пока на Rust это новые плагины и соотвественно под очень специфичные и редкие задачи, Gstreamer и все основные плагины написаны на С, в тексте новости логическая ошибка
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs
в общем за несколько лет существования проекта плагинов на Rust (лет 8 наверно) на нём пока написана мизерная часть плагинов и ни одним из них мне например не приходилось пользоваться.
>13 May, 2016
>Initial commitРастоманы за 8 лет смогли написать всего несколько штук плагинов, это очень показательно.
> Понятно что они ничего не могут написать (и не только на rust)
> но зачем это на всех остальных людей проецировать?А ты сейчас что делаешь?
Лучше бы с жабоскрипта на раст переписали или на что-нибудь подобное, но нормальное
Gstreamer всегда очень плохо работал и ничего с этим не сделать :'(
Лет 10 как эта информация устарела.
Хорошая штука. На винде использую для стриминга в фоне аудио с микрофона в докер контейнер Rhasspy для распознавания голосовых команд.
Кстати, он больше не падает с пульсой при вытыкании HDMI-кабеля с аудио?
С pipewire не наблюдал такого. Оно даже способно автоматически перенести воспроизводящийся в данный момент аудиопоток (источник - strawberry с gstreamer бекендом) на новое устройство, что я в последний наблюдал разве что на маках - даже на виндах успех этого не гарантирован.