Ace Stream Player source code и бинарные билды

Решил покопаться в исходном коде Acestream плеера.
http://oldforum.acestream.media/index.php?topic=2970.0

Вот что из этого получилось:

Spoiler

https://b9.icdn.ru/j/jcryton/9/64309749PrO.jpg

https://b9.icdn.ru/j/jcryton/0/64309750eSw.jpg

https://b9.icdn.ru/j/jcryton/1/64309751kCt.jpg

вывод плера при запуске из консоли:

https://b9.icdn.ru/j/jcryton/2/64309752YaH.jpg

https://b9.icdn.ru/j/jcryton/3/64309753WzK.jpg

Сейчас у себя пользуюсь версий основанной на VLC-2.2-git (v2.2.8 от 2018-07-24)
Преймущество версии на более новом vlc очевидны.
Эот возможность линковки как с ffmpeg-2 так и с ffmpeg-3, а также
использование актуальной libgcrypt.so.20.

Пару слов об исходном коде на https://bitbucket.org/AceStream/acestreamplayer

Если использовать последнюю версию патчей (последний коммит), то
при сборке версий 2.1.5 2.1.6 наблюдается баг:
После запуска плеера, при попытке скормить ему acestreamID или открытии плейлиста - плеер крашиться с ошибкой ‘std::bad_alloc’.
Природа этой ошибки точно подмечена здесь https://stackoverflow.com/questions/32666285/regarding-instance-of-stdbad-alloc
Полность убирает эту ошибку откат на 4 коммита назад:

git clone https://bitbucket.org/AceStream/acestreamplayer.git
git checkout efae1b2c7383b202dc48a992d191119651be2414
или HEAD~4

После этого отката полученные патчи, можно наложить на версии 2.1.5 и 2.1.6
И все три версии: 2.1.4 2.1.5 2.1.6 начинают работать одинаково стабильно.

Но версии vlc-2.1.x имеют зависимости от старых библиотек ffmpeg и libgcrypt, поэтому
версии 2.2.x будут куда поинтересней.
Последняя версия VLC-2.2-git v2.2.8 от 2018-07-24 весьма еще актуальна.
Взяв патчи от коммита efae1b2c7383b202dc48a992d191119651be2414 - я переработал их для версии VLC-2.2
Дополнительно добавил патчи для VLC от gentoo.

Полученные исходные коды можно взять здесь:


Готовые бинарные пакеты здесь:
https://github.com/Jcryton/acestreamplayer-2.1
https://github.com/Jcryton/acestreamplayer-2.2

Версии 2.2.4-2.2.7 при сборке слинкованы с ffmpeg 2.8.10
Версия 2.2.8 и v2.2.8-git от 2018-07-24 при сборке слинкованы с ffmpeg 2.8.10 и с ffmpeg 3.3 на выбор
Нужную версию можно выбрать в разделе Release.

Так как я использую gentoo - deb пакеты делать не стал.
При желании вы можете их сделать из бинарных билдов используя зависимости взятые от ебилдов gentoo.
https://gitweb.gentoo.org/repo/gentoo.git/tree/media-video/vlc/vlc-2.2.8.ebuild?id=df3878d5f0c142965f05030c8e57ee4711b474d6

Пользуйтесь на здоровье.

j.cryton,
спасибо за проделанную работу.

Есть пару вопросов, а именно:

Да, поддержка H.265/HEVC в ffmpeg 2.8.10 и в vlc v2.2.4-v2.2.8 есть.
Соответственно в Acestrem Player v2.2.4 - v2.2.8 тоже есть.
https://trac.ffmpeg.org/wiki/Encode/H.265

Spoiler

https://o9.icdn.ru/j/jcryton/3/64329793CpX.jpg

https://o9.icdn.ru/j/jcryton/4/64329794PkO.jpg

https://o9.icdn.ru/j/jcryton/5/64329795mEa.jpg

В версии 2.1.4-2.1.6 и в ffmpeg 1.2.10 поддержки H.265/HEVC нет.

Spoiler

https://o9.icdn.ru/j/jcryton/6/64329796zZw.jpg

https://o9.icdn.ru/j/jcryton/7/64329797GiP.jpg

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

Баг профиксил. Исходники на гитхабе обновил.
Билды без этого бага тут:


Сделать версию под windows в ближайшее время нет возможности.

Природа этого бага оказалась очень простая.
В input_manager,cpp input_manager,hpp были добавлены новые события и сигнылы для p2p.
В vlc. в обработчике событий QEvent была отладочная функиция assert(0), которая реагировала на неопознанный сигнал.
В vlc этих сигналов и событий нет - поэтому он не останавливался в отличие от acestream player.
Aseert(0) ставят для отладки и обычно убирают макросом NDEBUG.
http://www.c-cpp.ru/content/assert

Для acestream player отладочная функция Aseert(0) не нужна, событие отработается в другом месте,
А отладочный аварийный останов из-за дополнительного сигнала совершенно не нужен.

Сделал пакеты для Ubuntu 18.04 Bionic.

Spoiler

https://o9.icdn.ru/j/jcryton/6/64366266jSf.jpg

https://o9.icdn.ru/j/jcryton/9/64366349zXw.jpg

UPD:

Добавил пакеты для последней версии Debian 9.9 Stretch

Spoiler

https://o9.icdn.ru/j/jcryton/0/64377680qLf.jpg

https://o9.icdn.ru/j/jcryton/1/64377681IlO.jpg

Для запуска acestreamengine на Debian 9.9 Stretch нужно добавить две библиотеки libcrypto.so.1.0.0 и libssl.so.1.0.0 в /usr/lib/x86_64-linux-gnu, а также установить пакет python-apsw. Для Ubuntu 18.04 потребуется только установка пакета python-apsw

Пакеты тут:

На основе мануала: https://wiki.videolan.org/Win32Compile/ - сделал acestreamplayer версий 2.1.4 и 2.1.6 для windows.
Хост - gentoo, гостевая система ubuntu.
contrib компилировался вручную несколько часов.

Spoiler

https://o9.icdn.ru/j/jcryton/6/64725366nEk.jpg

https://o9.icdn.ru/j/jcryton/7/64725367ZuL.jpg

https://o9.icdn.ru/j/jcryton/8/64725368CsB.jpg

https://o9.icdn.ru/j/jcryton/9/64725369aVf.jpg

https://b9.icdn.ru/j/jcryton/0/64725370fTh.jpg

Запускаем, выбираем Direct3D в настройках: и пользуемся

Spoiler

https://o9.icdn.ru/j/jcryton/1/64725371AeV.jpg

Тестировал на windows 7 32-bit.

Скачать можно отсюда:

Я кстати ошибался. Когда собирал contib - увидел наличие файлов для поддержки HEVC/H.265

После сборки плеера открыл файл в формате hevc. Все прекрасно работает.
Так что в версиях 2.1.4 2.1.5 2.1.6 поддержка HEVC/H.265 есть.

Сделал отдельный git для contib

Теперь сборка под windows сводится всего лишь к двум скриптам:
./win32prepare.sh
./win32build.sh

На выходе готовый архив с плеером для windows.

Подробнее тут:

Сделал версии 2.2.6, 2.2.8, 2.2.8.1 (vlc-2.2.git от 24-Jul-2018) для windows.

Spoiler

https://o9.icdn.ru/j/jcryton/6/64822986PyU.jpg

https://o9.icdn.ru/j/jcryton/8/64822988pEt.jpg

https://o9.icdn.ru/j/jcryton/9/64829579StV.jpg

https://o9.icdn.ru/j/jcryton/0/64829580GtN.jpg

https://b9.icdn.ru/j/jcryton/5/64822985pMf.jpg

Поддержка Hevc естественно присутствует:

Spoiler

https://o9.icdn.ru/j/jcryton/7/64822987yQp.jpg

https://b9.icdn.ru/j/jcryton/4/64822984GiE.jpg

Готовые билды:




Просто распаковываем архив в удобном месте и запускаем плеер. Движок запуститься автоматически, (если он установлен). С версиями 2.1.4 и 2.1.6 - аналогично.

Собрать плеер можно самому запустив по очереди два скрипта, по аналогии с версиями 2.1.4 и 2.1.6.
Более подробно тут:

Первоначально, когда делал версию под линукс, даже не думал что буду делать версию для windows.
Ну раз попросили - сделал.
Приятного просмотра.

j.cryton, Спасибо вам за инициативу и сделанную работу!

Помимо “Спасибо” мы хотели бы вам еще выразить свою благодарность материальным поощрением. :wink:

Подробности, в личку…

Спасибо. Написал в ЛС.