Chrome 插件PPAPI 開發(一)環境搭建


前言:本文參考了其他已有的文章,在其基礎上簡化了一些沒有必要的操作。

同時也記錄一下chrome 插件ppapi環境的基礎搭建。並且感謝已有文章作者的大無畏的分享精神!

在這附上參考文章鏈接:https://blog.csdn.net/y601500359/article/details/72821974 

當前系統版本為 Windows 10 x64, Chrome 版本 71.0.3578.98(正式版本) (32 位),VS2013(中文版)

==============================================================================

如果你能下載到NACL SDK pepper_47 或者 pepper_49 的話下面的一些操作可以省略,直接從步驟4開始看起!(僅限編譯運行media_stream_vide)

----------------------------------------------------------------

1.)下載 "假"nacl_sdk (此操作可以省略)

先下載並安裝 Python 因為更新的時候需要。

 https://www.python.org/download/

* 必須使用 Python 2.7 版本

這個步驟主要是為了更新真的NACL SDK 改步驟全程需要翻牆。(不翻牆可以從別處下載一個下來很小大概38kb左右)

解壓nacl_sdk 之后進入其目錄下 shift +右鍵 選擇啟動命令行:

 

2.)更新真 NACL SDK (此操作可以省略)

步驟2全程需要翻牆更新 。在更新之前可以通過 list命令查看版本信息:

./naclsdk.bat  list 

post_stable:前一個穩定版本

stable:穩定版,推薦追求穩定的普通用戶使用,更新最慢。
beta:測試版,有一定新功能,但是可能會存在不穩定情況,適合喜歡嘗鮮的朋友使用,更新速度一般。
dev:開發版,更新最快,新功能最多,但是可能非常不穩定,適合開發人員使用。

此處我使用的是pepper_47 版本。

然后使用更新命令:./naclsdk.bat update

可能會出現如下錯誤:

出現的原因 原作者說是 證書cacerts.txt 的問題。解決方案可以從原作者提供的下載連接進行下載然后替換nacl_sdk下面的這個文件(可能需要多次替換)

原作者提供的證書文件下載連接:https://download.csdn.net/download/y601500359/10442560 (再次感謝原作者的分享)

如果沒有什么問題正常應該是 會把pepper_49版本更新下來。如果想更新其他的版本可以使用下面的命令:

./naclsdk.bat update pepper_47

更新完成之后 真的sdk 就下載下來了如下:

3.)安裝 vs_addin (此操作可以不做)

按照原作者的教程 是使用命令:naclsdk update sdk_addin

我做這個操作的時候沒有正常更新下來,猜測可能是因為 vs_addin 的命名有更新

我是直接從別的地方直接下載 vs_addin (如果需要支持vs2013需要修改其install.py和create_ppapi_platform.py文件這里不做描述)

然后進vs_addin 目錄執行安裝命令:

install.bat (vs2010或者vs2013需要有英文語言包 因為再install 的時候會需要1033的語言包 這些再網上都可以下載到)

如果下載的語言安裝包如果安裝失敗的話,可以把該安裝包新建一個桌面快捷方式 然后點擊快捷方式右鍵選:屬性-目標 然后再路徑后面加上: -Uninstall

完整如下:D:\other\vs2013.exe -Uninstall 

就可以正常安裝英文語言包了。

這一步驟完全可以省略不去做因為,安裝不安裝vs_addin 也不影響正常ppapi開發!!!

 

4.)設置Chrome 瀏覽器環境路徑和開啟nacl

首先需要本機安裝chrome 瀏覽器 默認情況下 其絕對路徑應該為:C:\Users\Admin\AppData\Local\Google\Chrome\Application\chrome.exe

再系統環境變量 path 后面加上:C:\Users\Admin\AppData\Local\Google\Chrome\Application 

其次開啟chrome 瀏覽器nacl 相關模塊:

打開chrome 瀏覽器 地址欄輸入: chrome://flags/

開啟之后按F12 選一下 network 里邊的Disable cache 

然后重啟瀏覽器 地址欄輸入:chrome://nacl 檢測一下是否正常開啟。

 

5.)編譯NACL SDK 自帶 Demo:pepper_47\examples\api\media_stream_video

1.打開vs2013 新建win32 項目起名:media_stream_video 然后選擇DLL 完成創建。

2.刪除自動生成那些.h .cpp 文件。

3.拷貝nacl sdk目錄下的dmeo:pepper_47\examples\api\media_stream_video 下的 media_stream_video.cc 文件到新建的win32項目目錄下並且添加到項目當中。

4.再新建的win32項目的目錄下新建兩個文件夾:include 和 lib

5.拷貝nacl sdk 下的include 和lib文件到步驟4新建include 和 lib目錄下(具體拷貝pepper_47/include 目錄下的所有文件。拷貝pepper_47/lib/win_x86_32_host/release 目錄下的所有lib文件)。

6.回到win32程序中選擇 release 模式然后 取消預編譯頭 並且設置:在“配置屬性–>C/C++–>代碼生成–>運行庫”中設置為MT

7.設置項目依賴include目錄:“配置屬性--》C/C++>>常規-》附加包含目錄”中增加:./include 

8.設置項目以來lib目錄:“配置屬性--》連接器>>常規-》附加庫包含目錄”中 增加: ./lib

9.加入項目依賴具體lib:“配置屬性--》連接器>>輸入-》附加依賴項”中 增加:

ppapi.lib
ppapi_cpp.lib
ppapi_gles2.lib

 

如下:

10.直接編譯生成 media_stream_video.dll 會再項目Release目錄下。

11.拷貝nacl sdk :pepper_47/examples/api/media_stream_video/index.html 文件到剛才生成Release目錄下修改html內容參考如下:

!DOCTYPE html>
<html>
  <!--  Copyright 2014 The Chromium Authors. All rights reserved.  Use of this source code is governed by a BSD-style license that can be  found in the LICENSE file.  -->
<head>
    <title>Media Stream Video Example</title>
    <script type="text/javascript">
        var plugin; var stream;
        function handleMessage(message)
        { console.log(message); }
        function success(s)
        {
            stream = s;
            plugin.postMessage({ command: 'init', track: stream.getVideoTracks()[0] });
        }
        function failure(e)
        {
            console.log(e);
        }
        function initialize()
        {
            plugin = document.getElementById('plugin');
            plugin.addEventListener('message', handleMessage, false);
            var constraints = { audio: false, video: { mandatory: { minWidth: 640, minHeight: 320, minFrameRate: 30 }, optional: [] } };
            navigator.webkitGetUserMedia(constraints, success, failure);
        }
        function changeFormat(format)
        {
            plugin.postMessage({ command: 'format', format: format });
        }
        function changeSize(width, height)
        {
            plugin.postMessage({ command: 'size', width: width, height: height });
        }
        document.addEventListener('DOMContentLoaded', initialize, false);
    </script>
</head>
<body>
    <h1>Pepper MediaStream Video API Example</h1><br>  
    This example demonstrates receiving frames from a video MediaStreamTrack and
    rendering them in a plugin.<br>  
    Left side shows YUV frames. Right side shows BGRA frames.  
    <embed id="plugin" type="application/x-ppapi-example-media-stream-video" width="640" height="240" />  
    <h2>Format:</h2><br>  
    <button onclick="            changeFormat('YV12')">YV12</button>  
    <button onclick="            changeFormat('I420')">I420</button>  
    <button onclick="            changeFormat('BGRA')">BGRA</button>  
    <button onclick="            changeFormat('DEFAULT')">DEFAULT</button>  
    <h2>Size:</h2><br>  
    <button onclick="            changeSize(72, 72)">72 x 72</button>  
    <button onclick="            changeSize(640, 360)">640 x 360</button>  
    <button onclick="            changeSize(1280, 720)">1280 x 720</button>  
    <button onclick="            changeSize(0, 0)">DEFAULT</button>
</body>
</html>

其中 PostMessage(message) 用於向 C++ 端發送消息,HandleMessage 用於接收來自 C++ 端的消息

12.為了方便測試該DLL 我是直接拷貝該Release 整個目錄到 D盤根目錄下的“1”文件夾中。

13.管理員身份開啟命令行 輸入命令行參數:

chrome --register-pepper-plugins="D:/1/Release/media_stream_video.dll#ppexample##1.0.0;application/x-ppapi-example-media-stream-video" file:///D:/1/Release/index.html

--register-pepper-plugins 參數表示注冊 PPAPI 插件,其中 application/x-ppapi-hello 為插件類型,注意這個類型名要和 HTML 中指定的 embed 元素的類型名要完全匹配

正常就可以開啟攝像頭了

===========================================================================================================

補充:如果你執行的時候頁面提示:”該插件不受支持“ 這個時候你需要把所有開啟的chrme 瀏覽器關閉掉然后再執行 剛才的命令就可以正常加載DLL了

再次補充:上面的一些步驟可以省略的還有不需要操作的。是因為只需要把真正的NACL SDK 搞到就行,然后只需要其里邊的 include 文件 和lib文件 。

vs_addin 也不用安裝。編譯的時候直接 再項目中新建include和lib 目錄作為依賴就可以正常編譯ppapi插件了。記得編譯的時候要選release模式 因為debug模式下可能會編譯出錯。

-----------------------------------------

備注:如果執行上面的命令行想看到 程序內部的 OutputDebugString 輸出 需要關閉chrome 沙箱 

命令行:chrome -no-sandbox --register-pepper-plugins="D:/1/Release/media_stream_video.dll#ppexample##1.0.0;application/x-ppapi-example-media-stream-video" file:///D:/1/Release/media_stream_video.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM