[**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
~~~
效果如下:

僅止于此?
繼續研究中……
相關文章參考:
- [**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)
- 前言
- CEF Windows開發環境搭建
- CEF加載PPAPI插件
- VS2013編譯最簡單的PPAPI插件
- 理解PPAPI的設計
- PPAPI插件與瀏覽器的交互過程
- Windows下從源碼編譯CEF
- 編譯PPAPI的media_stream_video示例
- PPAPI插件的繪圖與輸入事件處理
- 在PPAPI插件中創建本地窗口
- PPAPI插件與瀏覽器的通信
- Windows下從源碼編譯Skia
- 在PPAPI插件中使用Skia繪圖
- 加載DLL中的圖片資源生成Skia中的SkBitmap對象
- PPAPI+Skia實現的涂鴉板
- PPAPI中使用Chromium的3D圖形接口
- PPAPI中使用OpenGL ES繪圖