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

Решил покопаться в исходном коде Acestream плеера.

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

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.

Пару слов об исходном коде на Bitbucket

Если использовать последнюю версию патчей (последний коммит), то
при сборке версий 2.1.5 2.1.6 наблюдается баг:
После запуска плеера, при попытке скормить ему acestreamID или открытии плейлиста - плеер крашиться с ошибкой ‘std::bad_alloc’.
Природа этой ошибки точно подмечена здесь c++ - regarding: instance of 'std::bad_alloc' - Stack Overflow
Полность убирает эту ошибку откат на 4 коммита назад:

git clone Bitbucket
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.

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

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:

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

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