编译PPAPI的media_stream_video示例
最后更新于:2022-04-01 16:02:54
[**Windows下从源码编译CEF**](http://blog.csdn.net/foruok/article/details/50498740)一文编译了CEF和PPAPI的C++接口对应的静态库,现在来编译media_stream_video示例了。
使用VS 2013来编译。
> foruok原创,如需转载请关注foruok的微信订阅号“程序视界”联系foruok。
# VS项目的创建
新建一个名为media_stream_video的Win32项目,类型选DLL,去掉预编译头文件stdafx.h和stdafx.cpp,并且在项目属性–>配置属性–>C/C++–>预编译头,把预编译头选项的值设置为不使用预编译头。
删除自动生成的media_stream_video.cpp。
在“配置属性–>C/C++–>代码生成–>运行库”中设置为MT。
字符集使用 Unicode 字符集。
添加下列包含目录:
~~~
E:\sources\CEF\2526\chromium\src\cef\binary_distrib\cef_binary_3.2526.1364.gf6bf57b_windows32 //为了CEF
E:\sources\CEF\2526\chromium\src\third_party\khronos //为了GLES
E:\sources\CEF\2526\chromium\src //为了ppapi
E:\sources\CEF\2526\chromium\src\gpu //这个是为了gl2chromium.h
~~~
拷贝chromium\src\ppapi\examples\media_stream_video\media_stream_video.cc到项目目录下,并添加到工程。
添加下列附加库路径:
~~~
E:\sources\CEF\2526\chromium\src\cef\binary_distrib\cef_binary_3.2526.1364.gf6bf57b_windows32\Release //所有的lib都拷贝到这里吧,省事儿。
~~~
添加ppapi_cpp.lib、ppapi_cpp_objects.lib、libGLESv2.dll.lib、ppapi_gles2.lib等依赖库。
基本就这样了。
# 编译与运行
如果你编译工程,会遇到类似下面的链接错误:
> media_stream_video.obj : error LNK2001: 无法解析的外部符号 _GLES2EnableVertexAttribArray@4
media_stream_video.obj : error LNK2001: 无法解析的外部符号 _GLES2UseProgram@4
media_stream_video.obj : error LNK2001: 无法解析的外部符号 _GLES2VertexAttribPointer@24
media_stream_video.obj : error LNK2001: 无法解析的外部符号 _GLES2ClearColor@16
media_stream_video.obj : error LNK2001: 无法解析的外部符号 _GLES2GetAttribLocation@8
media_stream_video.obj : error LNK2001: 无法解析的外部符号 _GLES2ActiveTexture@4
这是因为media_stream_video需要链接ppapi_gles2.lib,而编译CEF时没有生成这个库。我们得手动编译下。
### 编译ppapi_gles2
默认编译CEF时,并没生成ppapi_gles2.lib这个文件。不过幸运的是,chromium\src\out\Release\obj\ppapi目录下生成了ppapi_gles2.ninja文件,它是ppapi_gles2.lib的构建文件。同时Release版本的构建文件chromium\src\out\Release\build.ninja内起始也添加了ppapi_gles2的build指令和subninja指令,只是build all目标中没有把ppapi_gles2添加进去。所以,其实一切都为我们准备好了,在chromium\src\out\Release目录下执行“ninja ppapi_gles2”命令就可以把ppapi_gles2.lib编译出来。
这也是手动编译部分模块的方法。
### 运行
用下面的命令可以运行:
~~~
cefsimple.exe --ppapi-out-of-process --register-pepper-plugins="E:\sources\CEF\2526\chromium\src\cef\binary_distrib\cef_binary_3.2526.1364.gf6bf57b_windows32\Release\media_stream_video.dll;application/x-ppapi-example-media-stream-video" --url=file:///E:/sources/CEF/2526/chromium/src/cef/binary_distrib/cef_binary_3.2526.1364.gf6bf57b_windows32/Release/media_stream_video.html
~~~
效果如下:
![video](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-22_56caac3397699.jpg "")
仅止于此?
继续研究中……
相关文章参考:
- [**CEF Windows开发环境搭建**](http://blog.csdn.net/foruok/article/details/50468642)
- [**CEF加载PPAPI插件**](http://blog.csdn.net/foruok/article/details/50485448)
- [**VS2013编译最简单的PPAPI插件**](http://blog.csdn.net/foruok/article/details/50485461)
- [**理解PPAPI的设计**](http://blog.csdn.net/foruok/article/details/50486788)
- [**PPAPI插件与浏览器的交互过程**](http://blog.csdn.net/foruok/article/details/50494061)
- [**Windows下从源码编译CEF**](http://blog.csdn.net/foruok/article/details/50498740)