前言:本文参考了其他已有的文章,在其基础上简化了一些没有必要的操作。

同时也记录一下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

最新文章

  1. ajax传递数组到后台
  2. Activiti系列:是否可以让某些流程的信息写到历史表,而另外一些不写?
  3. Oracle-数据库
  4. [POJ1330]Nearest Common Ancestors(LCA, 离线tarjan)
  5. CSS实现背景透明,文字不透明(各浏览器兼容) (转)
  6. java学习之数组(二)
  7. linux中挂载硬盘报错(you must specify the filesystem type)
  8. 实现一个简单的邮箱地址爬虫(python)
  9. NSString 的常见方法
  10. Java回调理解 (step by step)
  11. iis无法加载样式
  12. jquery 动态创建的元素,绑定事件无效之解决方法
  13. 用python实现的一个自动聊天的机器人
  14. 跟我一起学python(2)
  15. C#安装Telnet
  16. 编辑输出“Hello World”
  17. 百度Apollo学习(一)
  18. ASP.NET MVC使用RenderSection渲染节点
  19. C++多线程编程简单实例
  20. Docker中“TERM environment variable not set.”问题

热门文章

  1. Android游戏引擎总汇 原文出处:http://software.intel.com/en-us/blogs/2012/03/13/game-engines-for-android?page=1
  2. 学习php
  3. js入门 关于js属性及其数据类型(详解)
  4. cout设置输出数据不显示科学计数法
  5. git代理配置
  6. gerrit工具的数据提交流程
  7. mysql异常 : The driver has not received any packets from the server.
  8. IO队列深度max_queue_depth对系统性能的影响
  9. vscode setting
  10. 【dbdiff】数据库比对工具安装