參考鏈接
- https://blog.csdn.net/saga1979/article/details/51734001
- 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
編譯環境及相關軟件說明
- Qt 5.7.1 http://download.qt.io/archive/qt/5.7/5.7.1/
- VS2013 https://msdn.itellyou.cn/
- Python 2.7.13 https://www.python.org/downloads/windows/
- Perl (Strawberry vesion) http://strawberryperl.com/
- Bison and flex from https://sourceforge.net/projects/winflexbison/ (將 win-bison.exe 和 win-flex.exe 改名爲 bison.exe 、 flex.exe)
- Gperf http://gnuwin32.sourceforge.net/packages/gperf.htm
注意:將相關 exe 路徑加入到環境變量 Path 中
源碼下載及處理
獲取 Qt 5.7.1 源碼方式:
- 安裝 Qt 時選擇安裝源碼;
- 單獨下載源碼(我使用此方式),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
編譯
- 打開 VS2013 x86 命令行工具,或者執行如下命令(根據自己 VS2013 安裝的路徑修改)
“D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat” x86
- 切換到 QWebEngine 源碼路徑,執行 qmake
cd E:\QtSrc\qtwebengine
qmake.exe WEBENGINE_CONFIG+=use_proprietary_codecs
- 編譯,根據自己實際情況修改命令
“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
編譯環境及相關軟件說明
- Qt 5.12.3 http://download.qt.io/archive/qt/5.12/5.12.3/
- 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
編譯
- 打開 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.”錯誤
- 切換到 QWebEngine 源碼路徑,執行 qmake
cd E:\QtSrc5.12.3\qtwebengine
D:\Qt\Qt5.12.3\5.12.3\msvc2017\bin\qmake.exe – -webengine-proprietary-codecs
- 編譯,根據自己實際情況修改命令
“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