【问题标题】:Chromium Embedded Framework MP3 supportChromium 嵌入式框架 MP3 支持
【发布时间】:2011-12-23 10:13:52
【问题描述】:

我已经下载了适用于 Windows 的 Chromium Embedded Framework r306 并构建了它。不幸的是,它显示它不支持 mp3:

<script>
var a = document.createElement("audio");
document.write(a.canPlayType('audio/mpeg'));
</script>

输出为空,当我尝试打开一个 mp3 文件时,它无法播放(ogg 可以播放)。

在谷歌浏览器写“也许”的同时(它实际上在播放)。

如何在 CEF 中添加对 MP3 的支持?

【问题讨论】:

    标签: mp3 chromium chromium-embedded mpeg


    【解决方案1】:

    Marshall Greenblatt(Chromium Embedded Framework 的维护者)在 this bug report 中解决了 Chromium 和 CEF 中对 MP3(和 AAC)缺乏支持的问题(参见评论 #7,复制如下):

    Google Chrome 版本中包含 MP3 和 AAC 等编解码器,但 Chromium 版本中不包含。这是因为这些格式不开放并且需要许可。在没有许可协议的情况下随您的应用程序分发这些编解码器可能会违反某些国家/地区的法律。如果合适,您应该与律师讨论。

    【讨论】:

    • 他们可以为开发人员提供一种方法来包含 MP3 支持,风险自负。
    【解决方案2】:

    注意:请在继续之前考虑法律问题

    有一种方法可以在 CEF 中启用 MP3 支持,但您必须修改源代码分发中的 cef.gypi,重新生成 Visual Studio 项目并重新构建。

    分步说明:

    a a

    【讨论】:

    • 还需要安装 cmake :)
    • 我尝试按照此说明进行操作(Windows 10 / VS 2015),但没有任何乐趣。使铬刚刚返回超级有用的“返回代码 1”错误,我不知道现在该去哪里。按照指示,我具备所有先决条件。完全按照指示进行。有更简单的选择吗?
    • 现在我明白了 16g: 'Get-Content : 找不到路径 'B:\Downloads\cef-binary-master\cef-binary-master\cef_binary_3.2704.1414.g185cd6c_windows32\libcef_dll\ libcef_dll_wrapper.vcxproj' 因为它不存在。'
    • 第十四步你成功了吗?
    • 是的,我得到了非常相似的输出。我搜索了这些文件,发现了类似“make_projects.bat”的东西(我没有这些文件了)。项目文件已生成,但未放置在正确的文件夹中。我自己移动了它们,但它仍然不起作用。我又犯了一个错误。我将从头开始所有过程,但是 Chromium 需要大约 8 个小时来编译,所以我把它作为我项目的最后一部分。
    【解决方案3】:

    有一种方法可以在 CEF 中启用 MP3 支持,但您必须修改源代码分发中的 cef.gypi,重新生成 Visual Studio 项目并重新构建。

    详细构建说明:
    https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding

    启用专有编解码器支持:
    http://code.google.com/p/chromiumembedded/issues/detail?id=371

    将 'proprietary_codecs': 1 添加到您的 cef.gypi 配置中,以便根据 net/base/mime_util.cc 的要求定义 USE_PROPRIETARY_CODECS。

    您还需要正确构建 avcodec、avformat 和 avutil DLL。幸运的是,您可以从 Google Chrome 本身的安装目录 ($User/AppData/Local/Google/Chrome/$Version) 中获取这些内容。

    【讨论】:

    • 你能告诉我如何为 Delphi XE2 编译它吗?我不知道我该怎么做!
    • 嗯,这些是重建 CEF 本身的说明。完成此操作后,您只需使用 Delphi 中的构建作为标准二进制发行版的替代品。
    • 谢谢,你的意思是我应该只替换dll 文件吗?
    • 你能把编译好的二进制文件发给我吗?
    • 抱歉,我之前做过这个,但我没有最新的二进制文件。此外,您不应该接受来自陌生人的二进制文件 :) 确实,设置 Chromium 构建相当复杂,但如果您按照链接页面上的说明进行操作,应该没问题。
    【解决方案4】:

    自上次回答以来,启用proprietary codecs 的选项(即H.264 和MP3)已被移动。

    您可以阅读我的answer,了解有关如何在启用proprietary codecs 的情况下编译 CEF 的所有详细信息

    魔法现在发生在这里:

    set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome
    

    您应该更新/创建 2 个批处理文件(如发现 here):

    c:\code\chromium_git\update.bat:

    set CEF_USE_GN=1
    set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome
    set GN_ARGUMENTS=--ide=vs2015 --sln=cef --filters=//cef/*
    python ..\automate\automate-git.py --download-dir=C:\code\chromium_git --depot-tools-dir=C:\code\depot_tools --no-distrib --no-build
    

    c:\code\chromium_git\chromium\src\cef\create.bat:

    set CEF_USE_GN=1
    set GN_DEFINES=is_win_fastlink=true proprietary_codecs=true ffmpeg_branding=Chrome
    set GN_ARGUMENTS=--ide=vs2015 --sln=cef --filters=//cef/*
    call cef_create_projects.bat
    

    有 2 篇 wiki 文章解释了如何构建 CEF/Chromium:

    1. https://bitbucket.org/chromiumembedded/cef/wiki/MasterBuildQuickStart.md
    2. BranchesAndBuilding在同一个wiki中

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • 我添加了链接中的所有详细信息。因为它是一个 SO 链接,所以我假设它“永远不会死” ...
    • @Eugen 永远不要假设链接最终不会更改或被删除。仅针对 SO,可以进行标记,可以删除问题,可以进行外部编辑;所有这些都可能导致您对该链接的回答与预期不同,或者被完全删除。
    【解决方案5】:

    仅支持 MP3 编解码器构建到 Google Chrome 时,请检查 chromium's Codec Support

    在客户端,兼容的方式可能是Flash,查看谷歌翻译的代码。

    【讨论】:

      【解决方案6】:

      我按照 null1941 的回答中的步骤操作,他们工作得很好,除了一些与修改 build.ps1 脚本有关的警告

      step 16 e. search for any instances of 3.y.z and replace them with the current version you are building (from the folder name containing the builds ex. 3.2272.32.gbda8dc7).  
      
      in function DownloadNuget it is trying to see if you have nuget in a specific place and if it isn't there it tries to go get it.  Problem is DownloadFile would fail if the save directory didn't already exist. so you can manualy create or add this to the function:
          $Nuget_dir = Join-Path $env:LOCALAPPDATA .\nuget
          if(-not (Test-Path $Nuget_dir))
          {
              mkdir $Nuget_dir
          }
      
      change line: "Copy-Item $Cef64\include $CefInclude -Recurse | Out-Null" to use $Cef32 if you don't have 64bit cef folders
      

      【讨论】:

        猜你喜欢
        • 2023-03-04
        • 2014-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-21
        相关资源
        最近更新 更多