Є перевірена новина, що у експериментальній версії браузера Chromium 55.0.2850 для Windows з'явилася можливість програвати медіа файли формату (HEVC або він же h265).
Офіційна інструкція - Get the Code: Checkout, Build, & Run Chromium (linux)
- Створюємо робочу теку:
$ mkdir chromium $ cd chromium
- Завантажуємо собі клон репозиторії depot_tools package.
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
- Додаємо теку до змінної оточення, додаючи до файлу ~/.bashrc рядок:
export PATH=$PATH:/path/to/depot_tools
Пере відкриваємо консоль термінала, і змінна повинна бути завантажена до оточення. - Скрипт для завантаження початкового коду Chromium: \
$ fetch chromium
fetch chromium - При першій компіляції необхідно завантажити залежності від інших програм:
$ cd src
Надалі усі команди виконуються у теці src.$ ./build/install-build-deps.sh
І по закінченню синхронізувати початковий код у теці src.$ gclient runhooks
- Бажано мати або отримати ключі розробника Google : install API keys
- Компілювати будемо до теки out/Default за допомогою мета системи GN. Вона використовує файл налаштувань BUILD.gn, і генерує файли для системи компіляції Ninja. Визначмо агрументи для створення робочої теки та файлу BUILD.gn.
$ gn args out/Default
Відкриється Ваш системний текстовий редактор і потрібно додати наступні значення для Google API keys, та опції модулів компіляції:google_api_key = "XXXXXXXXXXXXXXXXXXX" google_default_client_id = "YYYYYYYYYYY.apps.googleusercontent.com" google_default_client_secret = "ZZZZZZZZZZZZ" proprietary_codecs = true enable_hevc_demuxing = true is_component_build = true ffmpeg_branding = "Chrome"
Де X,Y,Z Ваші власні значення.
Закривши редактор (для редактора vi це - ESC :wq), буде створено теку out/Default, та файл out/Default/args.gn з цими аргументами. Також build.ninja
Якщо треба з'ясувати усі можливі аргументи та їх опис то ось весь список:$ gn args out/Default --list
- Для компіляції браузера Chromium команда:
$ ninja -C out/Default chrome
Ціль "chrome". Перелік можливих цілей:$ gn ls out/Default
- По закінченню компіляції десь 27000 об'єктів, отримаємо файл out/Default/chrome
Котрий можна запустити на виконання.
Результат компіляції браузер Chromium (Ubuntu) |
P.S. Дана публікація є нотаткою для себе що продовжити пізніше, так як на сьогодні 26.09.2016, я не отримав очікуваного результату, h265 файли не програються. А після правок 28.09.2016 вже програються!.
P.S. 1.
Але, треба перевірити цей пост:I would like to build Chromium myself with HEVC decoder. Can you share your patches?
try this http://pastebin.com/RMUqp2bU
#file src/third_party/ffmpeg/ffmpeg_generated.gni #append to your condition ffmpeg_c_sources += [ "libavcodec/hevc.c", "libavcodec/hevc_cabac.c", "libavcodec/hevc_data.c", "libavcodec/hevc_filter.c", "libavcodec/hevc_mvs.c", "libavcodec/hevc_parse.c", "libavcodec/hevc_parser.c", "libavcodec/hevc_ps.c", "libavcodec/hevc_refs.c", "libavcodec/hevc_sei.c", "libavcodec/hevcdsp.c", "libavcodec/hevcpred.c", "libavcodec/x86/hevcdsp_init.c", "libavformat/autorename_libavformat_hevc.c", "libavformat/hevcdec.c" ] ffmpeg_yasm_sources += [ "libavcodec/x86/hevc_deblock.asm", "libavcodec/x86/hevc_idct.asm", "libavcodec/x86/hevc_mc.asm", "libavcodec/x86/hevc_res_add.asm", "libavcodec/x86/hevc_sao.asm", "libavcodec/x86/hevc_sao_10bit.asm" ] #files src/third_party/ffmpeg/chromium/config/YOUR_BRAND/win/YOUR_ARCH/config.asm + config.h #add or replace some parameters #define FFMPEG_CONFIGURATION "******** --enable-decoder='hevc' --enable-demuxer='hevc' --enable-parser='hevc'" #define CONFIG_HEVC_DECODER 1 #define CONFIG_HEVC_DEMUXER 1 #define CONFIG_HEVC_PARSER 1За цим напрямком знашйов що можна створити власні конфігураційні
"ffmpeg_branding":
$cd third_party/ffmpegПідправити "chromium/scripts/build_ffmpeg.py" line ~553
# Google Chrome & ChromeOS specific configuration. configure_flags['Chrome'].extend([ '--enable-decoder=aac,h264,mp3,hevc', '--enable-demuxer=aac,mp3,mov,hevc', '--enable-parser=aac,h264,mpegaudio,hevc', ])
$ cd chromium/scripts
$ ./build_ffmpeg.py linux x64 --branding "Chrome" $ ./copy_config.shДані конфігурації будуть збережені до теки
"third_party/ffmpeg/chromium/scripts/chromium/config/Chrome/linux/x64"
тепер можемо створити свій branding: ChromeL
Скопіювавши нові конфігуаційні файли до теки "third_party/ffmpeg/chromium/config"
І підправити out/Default/args.gn зміною ffmpeg_branding = "ChromeL"
та "third_party/ffmpeg/ffmpeg_options.gni" line 43:
assert(ffmpeg_branding == "Chromium" || ffmpeg_branding == "Chrome" || ffmpeg_branding == "ChromeL" || ffmpeg_branding == "ChromiumOS" || ffmpeg_branding == "ChromeOS")
$ gn args out/Default
P.S. 2: Є результат!!! 28.09.2016
Тепрер мій браузер Chromium v.55.0.2874.0 (linux x64) може програвати HTML5 відео кодоване форматом h265, HEVC.Chromium browser 55.0.2874.0 (linux x64) can play HTML5 video h265, hevc |
Ось мої правки до станданої компіляції:
$ cd third_party/ffmpegДодав до файлу "ffmpeg_generated.gni" наступні рядки:
ffmpeg_c_sources += [ "libavcodec/hevc_filter.c", "libavcodec/hevc.c", "libavcodec/x86/hevcdsp_init.c", "libavcodec/hevc_parser.c", "libavcodec/hevc_sei.c", "libavcodec/hevc_data.c", "libavcodec/hevc_ps.c", "libavcodec/hevc_mp4toannexb_bsf.c", "libavcodec/hevcpred.c", "libavcodec/hevc_parse.c", "libavcodec/hevc_cabac.c", "libavcodec/hevcdsp.c", "libavcodec/hevc_refs.c", "libavcodec/hevc_ps_enc.c", "libavcodec/hevc_mvs.c", "libavformat/hevcdec.c", "libavcodec/x86/bswapdsp_init.c", "libavcodec/bswapdsp.c" ] ffmpeg_yasm_sources += [ "libavcodec/x86/hevc_res_add.asm", "libavcodec/x86/hevc_mc.asm", "libavcodec/x86/hevc_sao_10bit.asm", "libavcodec/x86/hevc_deblock.asm", "libavcodec/x86/hevc_idct.asm", "libavcodec/x86/bswapdsp.asm", "libavcodec/x86/hevc_sao.asm" ]Отримав цей перелік командами:
$ find . -name 'hevc*.c' |grep -v mips| grep -v arm | grep -v template $ find . -name 'hevc*.asm' |grep -v mips| grep -v armПлюс потребували у процесі компіляції додткові файли:
"libavcodec/x86/bswapdsp_init.c" "libavcodec/bswapdsp.c" "libavcodec/x86/bswapdsp.asm"
$ cd third_party/ffmpeg/chromium/scriptsЗміни у файлу "build_ffmpeg.py" рядок десь 553, додаю "hevc":
# Google Chrome & ChromeOS specific configuration. configure_flags['Chrome'].extend([ '--enable-decoder=aac,h264,mp3,hevc', '--enable-demuxer=aac,mp3,mov,hevc', '--enable-parser=aac,h264,mpegaudio,hevc', ])За допомгою цого файлу я отримав нову конфігураційну теку з новим "ffmpeg branding" за допомогою скрипту "third_party/ffmpeg/chromium/scripts/copy_config.sh"
На основі порівнянь створив зміни у фалах:
third_party/ffmpeg/chromium/config/Chrome/linux/x64/config.h:
#define FFMPEG_CONFIGURATION ..... --enable-decoder='aac,h264,mp3,hevc' --enable-demuxer='aac,mp3,mov,hevc' --enable-parser='aac,h264,mpegaudio,hevc' #define CONFIG_BSWAPDSP 1 #define CONFIG_HEVC_DECODER 1 #define CONFIG_HEVC_DEMUXER 1 #define CONFIG_HEVC_PARSER 1
third_party/ffmpeg/chromium/config/Chrome/linux/x64/config.h:
%define CONFIG_BSWAPDSP 1 %define CONFIG_HEVC_DECODER 1 %define CONFIG_HEVC_DEMUXER 1 %define CONFIG_HEVC_PARSER 1Використано було FFMPEG_VERSION "git-2016-09-16-3c7a098".
Після цих змін запускаю:
$ gn args out/Default $ ninja -C out/Default chrome
Тепер можна запускати браузер:
$ cd out/Default $ ./chrome
PS. 2017-03-10
1. General Chromium compile Linux (https://chromium.googlesource.com/chromium/src/+/master/docs/linux_build_instructions.md)2. HEVC support (https://github.com/henrypp/chromium/blob/master/hevc_support.md)
3. За змінами я створив thrid_party.patch ( diff -ruN third_party-orig/ third_party/ > thrid_party.patch)
hrid_party.patch:
diff -ruN third_party-orig/ffmpeg/chromium/config/Chrome/linux/x64/config.asm third_party/ffmpeg/chromium/config/Chrome/linux/x64/config.asm --- third_party-orig/ffmpeg/chromium/config/Chrome/linux/x64/config.asm 2017-03-09 11:44:09.000000000 -0800 +++ third_party/ffmpeg/chromium/config/Chrome/linux/x64/config.asm 2017-03-09 16:29:55.681700140 -0800 @@ -728,7 +728,7 @@ %define CONFIG_H264_VDA_DECODER 0 %define CONFIG_H264_VDPAU_DECODER 0 %define CONFIG_HAP_DECODER 0 -%define CONFIG_HEVC_DECODER 0 +%define CONFIG_HEVC_DECODER 1 %define CONFIG_HEVC_QSV_DECODER 0 %define CONFIG_HNM4_VIDEO_DECODER 0 %define CONFIG_HQ_HQA_DECODER 0 @@ -1204,7 +1204,7 @@ %define CONFIG_H261_DEMUXER 0 %define CONFIG_H263_DEMUXER 0 %define CONFIG_H264_DEMUXER 0 -%define CONFIG_HEVC_DEMUXER 0 +%define CONFIG_HEVC_DEMUXER 1 %define CONFIG_HLS_DEMUXER 0 %define CONFIG_HNM_DEMUXER 0 %define CONFIG_ICO_DEMUXER 0 @@ -2160,7 +2160,7 @@ %define CONFIG_H261_PARSER 0 %define CONFIG_H263_PARSER 0 %define CONFIG_H264_PARSER 1 -%define CONFIG_HEVC_PARSER 0 +%define CONFIG_HEVC_PARSER 1 %define CONFIG_MJPEG_PARSER 0 %define CONFIG_MLP_PARSER 0 %define CONFIG_MPEG4VIDEO_PARSER 0 @@ -2226,3 +2226,4 @@ %define CONFIG_LIBRTMPTE_PROTOCOL 0 %define CONFIG_LIBSSH_PROTOCOL 0 %define CONFIG_LIBSMBCLIENT_PROTOCOL 0 +%define FFMPEG_CONFIGURATION "******** --enable-decoder='hevc' --enable-demuxer='hevc' --enable-parser='hevc'" diff -ruN third_party-orig/ffmpeg/chromium/config/Chrome/linux/x64/config.h third_party/ffmpeg/chromium/config/Chrome/linux/x64/config.h --- third_party-orig/ffmpeg/chromium/config/Chrome/linux/x64/config.h 2017-03-09 11:44:09.000000000 -0800 +++ third_party/ffmpeg/chromium/config/Chrome/linux/x64/config.h 2017-03-09 16:32:54.625407634 -0800 @@ -744,7 +744,7 @@ #define CONFIG_H264_VDA_DECODER 0 #define CONFIG_H264_VDPAU_DECODER 0 #define CONFIG_HAP_DECODER 0 -#define CONFIG_HEVC_DECODER 0 +#define CONFIG_HEVC_DECODER 1 #define CONFIG_HEVC_QSV_DECODER 0 #define CONFIG_HNM4_VIDEO_DECODER 0 #define CONFIG_HQ_HQA_DECODER 0 @@ -1220,7 +1220,7 @@ #define CONFIG_H261_DEMUXER 0 #define CONFIG_H263_DEMUXER 0 #define CONFIG_H264_DEMUXER 0 -#define CONFIG_HEVC_DEMUXER 0 +#define CONFIG_HEVC_DEMUXER 1 #define CONFIG_HLS_DEMUXER 0 #define CONFIG_HNM_DEMUXER 0 #define CONFIG_ICO_DEMUXER 0 @@ -2176,7 +2176,7 @@ #define CONFIG_H261_PARSER 0 #define CONFIG_H263_PARSER 0 #define CONFIG_H264_PARSER 1 -#define CONFIG_HEVC_PARSER 0 +#define CONFIG_HEVC_PARSER 1 #define CONFIG_MJPEG_PARSER 0 #define CONFIG_MLP_PARSER 0 #define CONFIG_MPEG4VIDEO_PARSER 0 diff -ruN third_party-orig/ffmpeg/ffmpeg_generated.gni third_party/ffmpeg/ffmpeg_generated.gni --- third_party-orig/ffmpeg/ffmpeg_generated.gni 2017-03-09 11:44:09.000000000 -0800 +++ third_party/ffmpeg/ffmpeg_generated.gni 2017-03-09 16:17:28.463038348 -0800 @@ -660,3 +660,30 @@ ] } +ffmpeg_c_sources += [ + "libavcodec/bswapdsp.c", + "libavcodec/hevc.c", + "libavcodec/hevc_cabac.c", + "libavcodec/hevc_data.c", + "libavcodec/hevc_filter.c", + "libavcodec/hevc_mvs.c", + "libavcodec/hevc_parse.c", + "libavcodec/hevc_parser.c", + "libavcodec/hevc_ps.c", + "libavcodec/hevc_refs.c", + "libavcodec/hevc_sei.c", + "libavcodec/hevcdsp.c", + "libavcodec/hevcpred.c", + "libavcodec/x86/bswapdsp_init.c", + "libavcodec/x86/hevcdsp_init.c", + "libavformat/hevcdec.c", +] +ffmpeg_yasm_sources += [ + "libavcodec/x86/bswapdsp.asm", + "libavcodec/x86/hevc_deblock.asm", + "libavcodec/x86/hevc_idct.asm", + "libavcodec/x86/hevc_mc.asm", + "libavcodec/x86/hevc_res_add.asm", + "libavcodec/x86/hevc_sao.asm", + "libavcodec/x86/hevc_sao_10bit.asm", +]2.1 Зробимо зміни за патчем у теці third_party:
patch -p1 -i ../thrid_party.patch -d third_party
Перекомпілюємо:
ninja -C out/Default chrome
Тепер повинна бути підтримка hvec
Версія 59.0.3036.0 (Конструкція розробника) (64-розрядна версія) |
Версія 59.0.3036.0 with x265 (HVEC) |
Немає коментарів:
Дописати коментар