Windows 編譯 QWebEngine 支持 MP4 播放(5.7.1 & 5.12.3)

參考鏈接

  1. https://blog.csdn.net/saga1979/article/details/51734001
  2. https://stackoverflow.com/questions/50510457/how-to-compile-qt-webengine-5-11-on-windows-with-proprietary-codecs

背景描述

使用 QWebEngine 播放 mp4 視頻,在 Win10 上可以播放, Win7 上則播放不了。
查詢資料發現,需要自己編譯 Qt WebEngine 並添加解碼器。

Audio and Video Codecs
Qt WebEngine supports the MPEG-4 Part 14 (MP4) file format only if the required proprietary audio and video codecs, such as H.264 and MPEG layer-3 (MP3), have been enabled. Proprietary codecs can be enabled by passing the following option to qmake when building Qt WebEngine:

qmake WEBENGINE_CONFIG+=use_proprietary_codecs

Qt 5.7.1

編譯環境及相關軟件說明

  1. Qt 5.7.1 http://download.qt.io/archive/qt/5.7/5.7.1/
  2. VS2013 https://msdn.itellyou.cn/
  3. Python 2.7.13 https://www.python.org/downloads/windows/
  4. Perl (Strawberry vesion) http://strawberryperl.com/
  5. Bison and flex from https://sourceforge.net/projects/winflexbison/ (將 win-bison.exe 和 win-flex.exe 改名爲 bison.exe 、 flex.exe)
  6. Gperf http://gnuwin32.sourceforge.net/packages/gperf.htm

注意:將相關 exe 路徑加入到環境變量 Path 中

源碼下載及處理

獲取 Qt 5.7.1 源碼方式:

  1. 安裝 Qt 時選擇安裝源碼;
  2. 單獨下載源碼(我使用此方式),http://download.qt.io/archive/qt/5.7/5.7.1/single/

注意:源碼存放路徑不要太深,有可能導致編譯時文件名過長而失敗。我放在 E:\QtSrc

源碼中一些文件需要改成 utf-8 bom 格式。需要修改的文件列表如下:

E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\openmax_dl\dl\api\omxtypes.h
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\snappy\src\snappy-stubs-internal.h
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\qcms\src\qcms.h
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\harfbuzz-ng\src\hb-private.hh
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\harfbuzz-ng\src\hb-ot-head-table.hh
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\harfbuzz-ng\src\hb-ot-layout-common-private.hh
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\harfbuzz-ng\src\hb-ot-shape-complex-indic.cc
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\harfbuzz-ng\src\hb-ot-shape-complex-thai.cc
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\include\openssl\aead.h
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\include\openssl\engine.h
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\crypto\cmac\cmac.c
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\crypto\rsa\internal.h
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\skia\src\effects\skdisplacementmapeffect.cpp
E:\QtSrc\qtwebengine\src\3rdparty\chromium\crypto\p224.h
E:\QtSrc\qtwebengine\src\3rdparty\chromium\crypto\p224.cc
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\libxslt\libxslt\xslt.c
E:\QtSrc\qtwebengine\src\3rdparty\chromium\net\quic\crypto\crypto_handshake_message.h
E:\QtSrc\qtwebengine\src\3rdparty\chromium\media\formats\mp2t\ts_section_pmt.h
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\libjingle\source\talk\app\webrtc\dtmfsender.cc
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\re2\src\re2\unicode_casefold.h
E:\QtSrc\qtwebengine\src\3rdparty\chromium\v8\src\parsing\parser.cc
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\include\openssl\curve25519.h
E:\QtSrc\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\include\openssl\ssl.h
E:\QtSrc\qtwebengine\src\3rdparty\chromium\url\scheme_host_port.h

將文件列表保存爲文件 1.txt。 新建 1.py,內容如下:

import sys
import os
import codecs
import chardet
 
def utf8_converter(file_path , universal_endline =True ):
    # Read from file
    print("file:"+ file_path)
    file_open = open(file_path, "rb")
    raw = file_open.read()
    encoding_name = chardet.detect(raw)[ 'encoding']
    print(encoding_name )
    file_open.close()
    # Decode
    raw = raw.decode(encoding_name)
    # Remove windows end line
    if universal_endline:
        raw = raw.replace( '\r\n', '\n')
    # Encode to UTF-8-sig
    raw = raw.encode('utf-8-sig')
 
    file_open = open(file_path, 'wb')
    file_open.write(raw)
    file_open.close()
    return 0
 
if __name__ == '__main__' :
    file = sys.argv[1].encode('unicode_escape')
    f = open(sys.argv[1], "r")
    s = f.read()
    files = s.split("\n")
    for file in files:
        utf8_converter(file, False)
    f.close()

注意,需要先安裝 chardet 模塊

pip.exe install chardet

然後執行

python.exe .\1.py .\1.txt

編譯

  1. 打開 VS2013 x86 命令行工具,或者執行如下命令(根據自己 VS2013 安裝的路徑修改)

“D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat” x86

  1. 切換到 QWebEngine 源碼路徑,執行 qmake

cd E:\QtSrc\qtwebengine
qmake.exe WEBENGINE_CONFIG+=use_proprietary_codecs

  1. 編譯,根據自己實際情況修改命令

“D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\nmake.exe”

前後我編譯加修改編譯錯誤用了大概 4 個小時。

下載地址

鏈接:https://pan.baidu.com/s/1ZZi_VVZjxNI19N5ebk9HUQ
提取碼:fzan

Qt 5.12.3

編譯環境及相關軟件說明

  1. Qt 5.12.3 http://download.qt.io/archive/qt/5.12/5.12.3/
  2. VS2017 https://msdn.itellyou.cn/

    注意1:其他相關 exe 可以通過上面方法添加,或者 使用Qt 源碼裏提供的 /path/to/src/gnuwin32/bin
    注意2:VS2017安裝時,需要選擇 Windows 10 SDK,版本 10.0.16299及以上都可以

源碼下載及處理

下載 Qt 5.12.3 源碼,需要修改的文件列表如下(同 5.7.1 並去掉了 5.12.3中沒有的文件):

E:\QtSrc5.12.3\qtwebengine\src\3rdparty\chromium\third_party\openmax_dl\dl\api\omxtypes.h
E:\QtSrc5.12.3\qtwebengine\src\3rdparty\chromium\third_party\snappy\src\snappy-stubs-internal.h
E:\QtSrc5.12.3\qtwebengine\src\3rdparty\chromium\third_party\qcms\src\qcms.h
E:\QtSrc5.12.3\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\include\openssl\aead.h
E:\QtSrc5.12.3\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\include\openssl\engine.h
E:\QtSrc5.12.3\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\crypto\cmac\cmac.c
E:\QtSrc5.12.3\qtwebengine\src\3rdparty\chromium\crypto\p224.h
E:\QtSrc5.12.3\qtwebengine\src\3rdparty\chromium\crypto\p224.cc
E:\QtSrc5.12.3\qtwebengine\src\3rdparty\chromium\media\formats\mp2t\ts_section_pmt.h
E:\QtSrc5.12.3\qtwebengine\src\3rdparty\chromium\third_party\re2\src\re2\unicode_casefold.h
E:\QtSrc5.12.3\qtwebengine\src\3rdparty\chromium\v8\src\parsing\parser.cc
E:\QtSrc5.12.3\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\include\openssl\curve25519.h
E:\QtSrc5.12.3\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\include\openssl\ssl.h
E:\QtSrc5.12.3\qtwebengine\src\3rdparty\chromium\url\scheme_host_port.h

編譯

  1. 打開 Qt 5.12.3(MSVC 2017 32-bit) 命令行工具,執行如下命令(根據自己 VS2017 安裝的路徑修改)

“C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvarsall.bat” amd64_x86
注意:我用這種方法,解決了 qmake 時 “Needs Visual Studio 2017 or higher QtWebEngine will not be built.”錯誤

  1. 切換到 QWebEngine 源碼路徑,執行 qmake

cd E:\QtSrc5.12.3\qtwebengine
D:\Qt\Qt5.12.3\5.12.3\msvc2017\bin\qmake.exe – -webengine-proprietary-codecs

  1. 編譯,根據自己實際情況修改命令

“C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86\nmake.exe”

前後我編譯加修改編譯錯誤用了大概 10多個小時。

下載地址

鏈接:https://pan.baidu.com/s/1oT82JaVLdqIk6RszV-XXAQ
提取碼:j0wx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章