使用 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
注意:将相关 exe 路径加入到环境变量 Path 中
获取 Qt 5.7.1 源码方式:
注意:源码存放路径不要太深,有可能导致编译时文件名过长而失败。我放在 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
“D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat” x86
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 源码,需要修改的文件列表如下(同 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
“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.”错误
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