libcef 初步使用

1.初步libcef 使用

libcef (Chromium Embedded Framework) 是一个用于在应用程序中嵌入 Chromium 浏览器的框架。以下是使用 libcef 的基本步骤和一些重要概念:

1. 基本设置:

   - 下载并安装 CEF SDK。
   - 在项目中包含 CEF 头文件和库。
   - 设置必要的运行时文件。

2. 初始化 CEF:

   ```cpp
   CefSettings settings;
   CefInitialize(main_args, settings, app, nullptr);
   ```

3. 创建浏览器窗口:

   ```cpp
   CefWindowInfo window_info;
   CefBrowserSettings browser_settings;
   CefBrowserHost::CreateBrowser(window_info, client, url, browser_settings, nullptr, nullptr);
   ```

4. 实现客户端处理程序:

   创建一个继承自 `CefClient` 的类,并实现必要的回调方法。

   ```cpp
   class MyClient : public CefClient {
     // 实现各种回调方法
   };
   ```

5. 消息循环:

   ```cpp
   CefRunMessageLoop();
   ```

6. 清理:

   ```cpp
   CefShutdown();
   ```

重要概念:

1. 多进程架构:CEF 使用多进程架构,包括主进程和渲染进程。

2. 线程模型:CEF 有多个线程,如 UI 线程、IO 线程等。

3. 回调机制:通过实现各种接口来处理事件和回调。

4. JavaScript 集成:可以在 C++ 和 JavaScript 之间进行交互。

5. 离屏渲染:支持将网页内容渲染到内存中而不是直接显示。

6. 自定义方案:可以注册自定义 URL 方案处理程序。

示例代码(简化版):

```cpp
#include <cef_app.h>
#include <cef_client.h>

class SimpleApp : public CefApp, public CefBrowserProcessHandler {
public:
  SimpleApp() {}
  virtual CefRefPtr<CefBrowserProcessHandler> GetBrowserProcessHandler() override { return this; }
  virtual void OnContextInitialized() override {
    // 创建浏览器窗口
    CefWindowInfo window_info;
    CefBrowserSettings browser_settings;
    CefRefPtr<SimpleClient> client(new SimpleClient());
    CefBrowserHost::CreateBrowser(window_info, client.get(), "http://www.google.com", browser_settings, nullptr, nullptr);
  }

  IMPLEMENT_REFCOUNTING(SimpleApp);
};

int main(int argc, char* argv[]) {
  CefMainArgs main_args(argc, argv);
  CefRefPtr<SimpleApp> app(new SimpleApp());
  return CefExecuteProcess(main_args, app.get(), nullptr);
}
```

这只是一个非常基础的例子。实际应用中,您可能需要处理更多的细节,如窗口创建、事件处理、自定义渲染等。建议查阅 CEF 官方文档和示例以获取更详细的信息和最佳实践。
 

2. libcef 重新编译支持 mp4 

要重新编译 libcef 以确保支持 MP4,需要遵循以下步骤:

1. 获取 Chromium 源码:
   由于 CEF 是基于 Chromium 的,首先需要获取 Chromium 的源代码。

   ```
   git clone https://chromium.googlesource.com/chromium/src.git
   ```

2. 获取 CEF 源码:
   在 Chromium 源码目录中,获取 CEF 源码。

   ```
   git clone https://bitbucket.org/chromiumembedded/cef.git
   ```

3. 同步依赖项:
   使用 Chromium 的工具同步所有必要的依赖项。

   ```
   gclient sync
   ```

4. 配置编译选项:
   确保 MP4 相关的编译选项被启用。编辑 `args.gn` 文件,添加或修改以下选项:

   ```
   proprietary_codecs = true
   ffmpeg_branding = "Chrome"
   ```

   这些选项将启用专有编解码器,包括 MP4 支持。

5. 生成项目文件:
   使用 GN 工具生成项目文件。

   ```
   gn gen out/Release --args="is_official_build=true proprietary_codecs=true ffmpeg_branding=\"Chrome\""
   ```

6. 编译 CEF:
   使用 Ninja 或其他适当的构建工具进行编译。

   ```
   ninja -C out/Release cef
   ```

7. 打包 CEF:
   使用 CEF 提供的脚本创建分发包。

   ```
   python tools/make_distrib.py --ninja-build
   ```

注意事项:

- 编译过程可能需要几个小时,具体取决于你的硬件配置。
- 确保你有足够的磁盘空间(至少 40GB)。
- 编译过程中可能会遇到各种依赖问题,需要根据错误信息逐一解决。
- 不同版本的 Chromium 和 CEF 可能有slight差异在编译步骤上,请参考相应版本的文档。

完成这些步骤后,你应该得到一个支持 MP4 的 CEF 构建。记得在你的应用中使用这个新构建的 CEF 版本,并进行充分测试以确保 MP4 支持正常工作。

注意事项

在使用 `gn gen out/Release --args` 命令时,你可以指定多个编译选项来定制 CEF 的构建。以下是一些常用和重要的编译选项,特别是对于支持 MP4 和优化性能的选项:

1. 基本选项:
   ```
   is_debug = false
   is_official_build = true
   ```

2. 编解码器支持(包括 MP4):
   ```
   proprietary_codecs = true
   ffmpeg_branding = "Chrome"
   ```

3. 符号选项:
   ```
   symbol_level = 0  # 减小二进制文件大小
   ```

4. 优化选项:
   ```
   use_jumbo_build = true  # 加速编译
   enable_nacl = false  # 禁用 Native Client,除非你需要
   ```

5. 平台特定选项(Windows 示例):
   ```
   target_cpu = "x64"  # 或 "x86" 用于 32 位
   is_win_fastlink = true  # 加速链接
   ```

6. 硬件加速:
   ```
   enable_vulkan = true
   use_vaapi = true  # 仅适用于 Linux
   ```

7. 其他多媒体选项:
   ```
   enable_widevine = true  # 如果需要 DRM 支持
   enable_hevc_demuxing = true  # 支持 H.265/HEVC
   ```

8. CEF 特定选项:
   ```
   is_component_build = false
   use_sysroot = false
   ```

完整的命令示例:

```bash
gn gen out/Release --args="is_debug=false is_official_build=true proprietary_codecs=true ffmpeg_branding=\"Chrome\" symbol_level=0 use_jumbo_build=true enable_nacl=false target_cpu=\"x64\" is_win_fastlink=true enable_vulkan=true use_vaapi=true enable_widevine=true enable_hevc_demuxing=true is_component_build=false use_sysroot=false"
```

注意事项:

1. 这些选项可能需要根据你的具体需求和目标平台进行调整。

2. 某些选项可能在不同的 Chromium/CEF 版本中有所变化,请查阅当前版本的文档。

3. 添加 `use_goma=true` 如果你使用 Google 的 Goma 编译加速服务。

4. 对于 Linux,可能需要添加 `use_system_libdrm=false`。

5. 如果遇到编译错误,可能需要逐个调整这些选项。

6. 确保你有足够的系统资源(CPU、内存、磁盘空间)来进行编译。

在运行 `gn gen` 命令后,使用 `ninja -C out/Release cef` 来开始实际的编译过程。根据你的硬件配置,这可能需要几个小时的时间。
 

  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值