1. 程式人生 > 實用技巧 >如何讓QMediaPlayer安裝包(NSIS)支援http網路流播放

如何讓QMediaPlayer安裝包(NSIS)支援http網路流播放

Windows平臺下,Qt的QMediaPlayer音視訊框架,解碼能力依賴於windows系統 DirectShow所支援的解碼器,這早已不是什麼新鮮事,為了讓QMediaPlayer支援更多的音視訊格式,通常會下載安裝諸如K-Lite-codec-pack的第三方解碼外掛,這樣qt媒體播放的能力已經很強大,可以滿足大多數的應用場景需求。網上這方面的資料已經很多,在這裡就不在複述了。然而實際工作中發現釋出,帶有Qt媒體播放器安裝包安裝完成後,還需要引導使用者去安裝一個第三方的外掛,這個對於使用者體驗確實不太友好,有待優化。本文通過實踐,找到一種可行的方案,將第三方解碼外掛放在安裝包一起打包釋出,避免多次安裝。下面以NSIS打包為例,描述流程。
1、下載安裝K-Lite code pack外掛
2、找到安裝目錄Filters\LAV64(我的安裝包是64位程式如果小夥伴是32位程式選擇LAV資料夾也可以的)。

3、拷貝資料夾到自己的打包目錄下
4、註冊LAVAudio.ax 、LAVAudio.ax 、LAVSplitter.ax三個元件。
可以通過如下命令列的方式,這需要管理員的許可權才能執行成功,(參考部落格連線:https://blog.csdn.net/qq_36360142/article/details/104278248)
cd/d %~dp0
regsvr32 /s LAVAudio.ax
regsvr32 /s LAVVideo.ax
regsvr32 /s LAVSplitter.ax
本文需要安裝的過程中執行一個指令碼命令讓其註冊,並且在解除安裝的時候將註冊資訊清除,因此需要在NSIS安裝腳本里加入如下指令碼程式碼片段:
安裝(參考連結:

https://www.cnblogs.com/haihai187/archive/2013/03/18/2965359.html)
Section -Post
WriteUninstaller "$INSTDIR\uninst.exe"

Exec 'regsvr32.exe /s "$INSTDIR\LAVAudio.ax"'
Exec 'regsvr32.exe /s "$INSTDIR\LAVVideo.ax"'
Exec 'regsvr32.exe /s "$INSTDIR\LAVSplitter.ax"'
SectionEnd
解除安裝:
Section Uninstall
Delete "$INSTDIR${PRODUCT_NAME}.url"

; 呼叫巨集只根據安裝日誌解除安裝安裝程式自己安裝過的檔案

!insertmacro DelFileByLog "$INSTDIR\install.log"

; 清除安裝程式建立的且在解除安裝時可能為空的子目錄,對於遞迴新增的檔案目錄,請由最內層的子目錄開始清除(注意,不要帶 /r 引數,否則會失去 DelFileByLog 的意義)

DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
ExecWait 'regsvr32.exe /s /u "$INSTDIR\LAVAudio.ax"'
ExecWait 'regsvr32.exe /s /u "$INSTDIR\LAVVideo.ax"'
ExecWait 'regsvr32.exe /s /u "$INSTDIR\LAVSplitter.ax"'
SetAutoClose true
SectionEnd
上面的程式碼片段是將LAV64資料夾下的外掛放在了我的安裝包根目錄裡,這個其實是可以隨便放的,只要LAVAudio.ax 、LAVAudio.ax 、LAVSplitter.ax對應的解碼外掛在個目錄,並且對其註冊即可。對這個過程有疑問的話,歡迎部落格留言交流!