LINUX.ORG.RU

почему видеоплеер Totem — тормозит?

 60fps, , , ,


0

1

добрый вечер, друзья!

### сразу к вопросу ###

я знаю что есть очень много пользователей-ПК которые НЕ любят видеоплеер Totem...

...но тем не менее — кто-нибудь может внятно рассказать *по_какой _причине* он тормозит больше чем другие видеоплееры? :-)

всем те кто хочет ответить — «потому что говянный код» — можете пожалуйста рассказать какая именно часть этого замечательного видеоплеера имеет «говянный» код (который ,очевидно, приводит к тормозам) ??

спасибо!

### ниже простыня, которую можно не читать :-) ###

предыстория такая..

мне нравится (и всегда нравился) Totem.

потому что он КЛАССНЫЙ, имеет минималистичный вид.., и имеет мало настроек.. я уважаю программы, которые имеют мало настроек (это значит что главный программист точно знает что именно хочет сделать, а НЕ говорит пользователям "пользователи, вот вам набор галочек, сами думайте чего хотите, выставляя эти галочки")

выбирая между несколькоми программами-БЕЗ-настроек и между одной программой-но-с-кучей-настроек — я бы предпочёл бы именно программу без настроек, при условии что она мне подходит..

но вот же незадача вышла какая... ... ...

десяток лет назад у меня был говнокомпьютер (говнокомпьютер даже по тем временам).. и на этом говнокомпьютере — Totem НЕ всегда мог справляться с задачей «показывать-фильм-хорошего-качества» .

то есть в те времена, если фильм был 720p , то была вероятность что Totem НЕ сможет без тормозов запустить на показ этот фильм!

а другие плеера — МОГЛИ! вот же обидно же было :-( .. например, mplayer с 720p справлялся!!

[[приходилось запускать Totem в обычном случае , и mplayer в случае фильма в высоком (720p) качестве]]

прошло десяток лет.. и теперь у меня уже не такой старый компьютер! [но и не совсем уж новый]

и видеофильмы 720p работают хорошо — на любом видеопроигрывателе.. ..включая Totem.

но тут возикла новая проблема.. :-)

понятие «хорошее качетве» теперь уже не то что было раньше :-D ..

теперь хорошем качеством является: 1080p и 60FPS (60 кадров в секунду).

ко всему прочему, теперь иногда оказывается что скаченный видеофильм — в формате VP9 {контейнер: MKV. видео: On2 VP9. звук: MPEG-4 AAC}.

то есть более полная картинк такая: VP9/AAC + 1080p + 60FPS :-)

ну и Totem на моём этом компьютере — уже НЕ может такое показывать без иногда-возникающих-тормозов .. а MPlayer — может, ЧТОб ЕМУ ПРОВАЛИТЬСЯ:)!

но как же так(?), ведь VPX-библиотека — она общая одна для всех?

Кривой gstreamer, которым играет totem плохо умеет аппаратное ускорение, как и vlc. Правда на разных видяшках и дровах умения могут сильно отличаться, на невидии с блобом лучше всего аппаратное ускорение умеет mpv.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

а что за аппаратное ускорение?

ведь аппаратно декодировать VPX — я так подозреваю что не имеет ни кто? :)

следовательно, имеется ввиду какое-то аппаратное ускорение, связанное с более быстрым выводом картинки на экран?

user_id_68054 ★★★★★
() автор топика
Ответ на: комментарий от user_id_68054

Как вариант - вычисления на GPU через CUDA. Но и от работы через обёртку в виде gstreamer-а скорость не увеличится.

peregrine ★★★★★
()

Запусти его из консоли, перед этим выполнив

export GST_DEBUG_DUMP_DOT_DIR=/tmp/gst-dump/

(Директорию создать надо будет заранее.)

Поглядел я на получившийся граф, узрел там аж три videoconvert в ряд через capsfilter, хотя казалось бы, зачем их столько. Программный декодер выдаёт YV12 картинку, которую можно сразу скармливать в xvimagesink. Но нет, он переводит всё в RGBA, чтобы выводить это на экран. Причём это всё ещё и не заработало у меня.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

спасиб за подсказку про эти дот-файты!

я ещё пока-что не разобрался доконца (сделал ``dot -Tsvg totem-prerolled.dot -o out1.svg``) , но выглядят схемки красиво! :-)

удивительно мне, что какой-то понимаешь-ли глупый-робот может нарисовать аж такое! :-)

блин! этож невиданный возможности! открывать Totem и смотреть что и как (через-что) декодируется! (а с Firefox работает? там же тоже GStreamer :-))

user_id_68054 ★★★★★
() автор топика
Ответ на: комментарий от user_id_68054

а с Firefox работает? там же тоже GStreamer

В коде должно явно вызываться GST_DEBUG_BIN_TO_DOT_FILE(), в Firefox такого нет. Но там ввод через appsrc, потом playbin, затем вывод через appsink. Кривовато работает.

i-rinat ★★★★★
()

короче вот что я пока что думаю, ребята...

судя по картинке(*) — для декодирования используется компонент «GstVP9Dec».

http://cgit.freedesktop.org/gstreamer/gst-plugins-good/tree/ext/vpx/gstvp9dec.h

http://cgit.freedesktop.org/gstreamer/gst-plugins-good/tree/ext/vpx/gstvp9dec.c

в файле «gstvp9dec.h» — написано:

#include <vpx/vp8dx.h>

очевидно, это значит, что используется библиотека «libvpx» (так как «vpx/vp8dx.h» — это её файл) ..

но в блоге вот-тут — https://blogs.gnome.org/rbultje/2014/02/22/the-worlds-fastest-vp9-decoder-ffvp9/ — написано что якобы реализация декодинга от «libvpx» — отстаёт на несколько процентов от встроенной реализации «VP9» из «ffmpeg».. ну и всякие графики, показывающие ущербность этой библиотеки :-) ..

fvp9 beats libvpx consistently by 25-50%. In practice, this means that typical middle- to high-end hardware will be able to playback 4K content using ffvp9, but not using libvpx. Low-end hardware will struggle to playback even 720p content using libvpx (but do so fine using ffvp9).

к тому же давайте глянем в «gstvp9dec.c» ..

тут есть константа...

#define DEFAULT_THREADS 1

...и эта константа используется как число декодирующих нитей поумолчанию (вручную можно задавать от 1 до 16) — «Maximum number of decoding threads».

то есть, думаю, стоит преположить что Totem НЕ задаёт число нитей (а использует то что поумолчанию).

но давайте для примера посмотрим как это же сделано в компоненте «GstAVVidDec»?

http://cgit.freedesktop.org/gstreamer/gst-ffmpeg/tree/ext/libav/gstavviddec.c

#define DEFAULT_MAX_THREADS		0

это константа которая для — «Maximum number of worker threads to spawn. (0 = auto)»..

очевидно предположить, что в «GstAVVidDec» число нитей автоматически выбирается изходя из числа ядер! в отличии от «GstVP9Dec»!

--------------------------------------------------

что думаете, ребят, на эту тему, i-rinat , peregrine ? может быть причина тормозов Totem — в этом?

user_id_68054 ★★★★★
() автор топика
Ответ на: комментарий от peregrine

плохо умеет аппаратное ускорение, как и vlc

В версии 2.2 они наконец то его сделали вполне нормальным

fornlr ★★★★★
()
Ответ на: комментарий от peregrine

mpv

поглядел щаз его — не тормозит :) ..

ну и вообще хорошие впечатления оставил он у меня..

GUI конечно же вырвиглазный.. но всё-таки кой-какой минимализм есть — это хорошо :)

user_id_68054 ★★★★★
() автор топика
Ответ на: комментарий от user_id_68054

GStreamer — это концентрированная боль при попытке хоть чуточку выйти за пределы предложенной канвы. Две недели. Две недели я пытался сделать довольно простую вещь — записывать декодированные кадры в GL текстуры отдельного контекста. Пусть сначала с выгрузкой на CPU, только без явной загрузки руками. Я надеялся, что это поможет в дальнейшем использовать VA-API и преобразовывать кадры прямо в GPU. Но нет. Ничего не вышло. Decodebin почему-то не пускает наружу из себя GLMemory, только сырые I420 кадры. Да и вообще нужная цепочка просто не работает! Даже в gst-launch-1.0! Какое уж там взаимодействие контекстов... Я теперь даже сомневаюсь, что он осилит GLX+GLES2; в документации упоминаются только GLX+GL и EGL+GLES2.

Вот и теперь ещё час убит без прогресса на выяснение способов работы с реестром GStreamer. У плагинов есть ранг, по которому они выбираются при построении цепочки. Теоретически, ранг можно менять не только во время исполнения; у GStreamer есть состояние, которое он хранит в реестре. Только вот как это делать — непонятно. Инструментов нет. Программный способ вроде как не делает ничего, strace не показывает записи в реестр, только чтение. И никаких намёков на то, можно это делать вообще или нет. И даже непонятно, где он вообще его создаёт.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.