参考链接
- 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