以 html5 音频流式传输或将 .amr 转换为 .ogg

2023-12-22

我想在我的服务器上流式传输 .amr 音频文件。经过几个小时的研究,我很清楚这在 html5 音频的当前状态下是不可行的。在这个令人失望的发现之后,我又花了几个小时寻找一种将 .amr 文件转换为 .ogg 的简单方法,但结果同样令人失望。

令我震惊的是,经过 10 多年的使用,没有简单的方法来播放/转换根据此标准编码的文件,但是有人可以帮助我找到一个可用的解决方案吗?最接近的可行选择似乎是sox http://linux.die.net/man/1/sox and ffmpeg http://www.ffmpeg.org/documentation.html。我理想地寻找一组简洁的指令,用于直接从 php 将 .amr 转换为 .ogg,但使用命令行就可以了。

我即将深入研究使用这两个库的细节,但我想我会在这里发帖,希望一些好心的人可以帮助启发其他时间有限的人,因此不想花一个下午来理清用例细节这应该是一项简单的任务。如果其他人不发帖,我会自己回答这个问题。

以下是我发现的一些其他“答案”,这些“答案”促使我在这里发布:

  • 使用 ffmpeg api 调用将 3gp (amr) 转换为 mp3 https://stackoverflow.com/q/9684826/418584
  • https://stackoverflow.com/q/4899195/418584 https://stackoverflow.com/questions/4899195/ffmpeg-amr-to-mp3-conversion-problem#comment5452617_4899195
  • 建议 - 如何开始转换视频/音频 https://stackoverflow.com/q/3947481/418584
  • FFmpeg 无法正确转换为 ogg https://stackoverflow.com/q/6863445/418584
  • ffmpeg/PHP - 将任何视频格式转换为 ogg 时出现问题 - 视频断断续续/无音频 - win64 https://stackoverflow.com/q/16268968/418584(海报实际上似乎自己回答了问题,我将首先采用这条路线,但没有其他答案,而且它并不特定于我的问题这一事实导致我无论如何都要发布这个)

如果您打算将其标记为“偏离主题”或出于其他原因关闭问题,请考虑以下事项:

搜索https://superuser.com/search?q=convert+.amr+to+.ogg https://superuser.com/search?q=convert%20.amr%20to%20.ogg,至少在上述链接之一中声明为该问题的适当论坛,(截至今天)导致 4 篇帖子,其中没有一篇甚至远程解决该问题。

The SO 发布指南 https://stackoverflow.com/help/on-topic在我看来完全符合这类问题。我很困惑为什么有人会关闭我搜索中出现的问题。我是一位非常有经验的开发人员,提出了一个与我正在做的开发工作直接相关的问题,并且被一个问题所困扰,我想提供一个解决方案来帮助其他遇到类似问题的开发人员。

事实上,在我的搜索中没有任何结果可以让我免于进行数小时的研究,这让我认为这是一个值得问的问题。请帮助我恢复对这个网站的感情,该网站是一个宝贵的资源,但由于如此多的此类毫无意义和看似不加区别的关闭后行为,让我感到冷淡。

谢谢...


如果您处于已安装工具的环境中,则转换文件实际上是一个非常简单的过程。对于 ffmpeg 和 sox,最基本形式的命令只是:

ffmpeg -i ./file.amr ./file.ogg

or

sox ./file.amr ./file.ogg

因此,如果我们上传一个输入名称为“audio”的文件,PHP 中的文件将类似于:

<?php
if (isset($_FILES['audio']) && is_file($TmpFile=$_FILES['audio']['tmp_name'])) {
    // I name uploaded files as curr ms timestamp and track file data via db. 
    $NewFile = './uploads/'.round(microtime(true)*1000).'.ogg';  
    shell_exec("ffmpeg -i {$TmpFile} -acodec libvorbis ".$NewFile);
    // You'll want to add other file data to the database here...
} else {
    // Deal with bad file uploads...
}
?>

不幸的是,我的服务器环境没有安装这些工具,所以我必须手动编译它们。具体就我而言,我使用的是虚拟共享主机,因此我没有系统上的通用访问权限。请记住,这反映在我用来安装各种 ffmpeg 组件的一些代码中。

cd ~/
curl -O http://ffmpeg.org/releases/ffmpeg-2.0.tar.gz
tar -xzvf ffmpeg-2.0.tar.gz
mv -fv ./ffmpeg-2.0 ./ffmpeg
rm -v ./ffmpeg-2.0.tar.gz

cd ~/ffmpeg
curl -O http://downloads.xiph.org/releases/ogg/libogg-1.3.1.tar.gz
tar -xzvf libogg-1.3.1.tar.gz
rm -v libogg-1.3.1.tar.gz
cd libogg-1.3.1
./configure --prefix="$HOME/ffmpeg" --disable-shared
make
make install
make distclean

cd ~/ffmpeg/
curl -O http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
tar -xzvf libvorbis-1.3.3.tar.gz
rm -v libvorbis-1.3.3.tar.gz
cd libvorbis-1.3.3
./configure --prefix="$HOME/ffmpeg" --with-ogg="$HOME/ffmpeg" --disable-shared
make
make install
make distclean

cd ~/ffmpeg/
curl -O -L http://sourceforge.net/projects/opencore-amr/files/opencore-amr/opencore-amr-0.1.3.tar.gz
tar -xzvf opencore-amr-0.1.3.tar.gz
rm -v opencore-amr-0.1.3.tar.gz
cd opencore-amr-0.1.3
./configure --prefix="$HOME/ffmpeg" --disable-shared --bindir="$HOME/bin"
make
make install
make distclean

cd ~/ffmpeg/
curl -O http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
tar -xzvf yasm-1.2.0.tar.gz
rm -v yasm-1.2.0.tar.gz
cd yasm-1.2.0
./configure --prefix="$HOME/ffmpeg" --bindir="$HOME/bin"
make
make install
make distclean


cd ~/ffmpeg/
mkdir ~/ffmpeg/tmp
chmod 777 ~/ffmpeg/tmp
export TMPDIR="$HOME/ffmpeg/tmp"
export PKG_CONFIG_PATH="$HOME/ffmpeg/lib/pkgconfig"
./configure --prefix="$HOME/ffmpeg" --extra-cflags="-I$HOME/ffmpeg/include" --extra-ldflags="-L$HOME/ffmpeg/lib" --bindir="$HOME/bin" --extra-libs="-ldl" --enable-gpl --enable-nonfree --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvorbis
make
make install
make distclean
rm -rfv $TMPDIR
export TMPDIR=""
export PKG_CONFIG_PATH=""

您可以将上述 bash 命令复制并粘贴到 shell 中,或者将它们放入可执行脚本中,它应该会处理所有事情。您可能需要检查每个组件的最新版本并相应地更新代码。如果您也使用不同的文件格式,您可能还想添加其他库,但这归结为我具体需要的内容。

您还可以使用:

git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg

如果您安装了 git,或者如果您既没有 git 也没有curl,则可以删除安装脚本中的第一段代码,您可以下载每个代码并将其上传到您的服务器或使用 fget 或类似的东西。

总而言之,这相当于几个小时的寻找文件、跟踪编译错误、跟踪我的场景的正确选项以及这种单调乏味的其他方面,而这些正是我最不喜欢的开发工作中最糟糕的部分。我希望这篇文章可以让其他人免于这种不必要的痛苦:-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以 html5 音频流式传输或将 .amr 转换为 .ogg 的相关文章

  • MySQL LAST_INSERT_ID() 和 FOUND_ROWS()

    当 PHP 脚本每秒有数百个查询时会发生什么 它会影响这些函数吗 是否保证它们会返回当前脚本中最后一个插入语句中最后插入的 id 它会返回当前脚本中最后一次选择的行数吗 如果同时从另一个脚本进行新的插入或选择 在 FOUND ROWS 的情
  • PHP7.1上读取会话数据失败

    分享一个我遇到的问题 现已解决 在我的开发机器上 我使用 PHP 运行 IIS 我升级到 PHP7 突然我的代码不再工作 返回此错误 session start 读取会话数据失败 用户 路径 C WINDOWS temp 看起来像是权限问题
  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误
  • 通过字符串操作预防 PHP SQL 注入[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 中防止 SQL 注入的最佳方法 https stackoverflow com questions 60174 best way to prevent sql injection in php
  • PHP 可以解压缩使用 .NET GZipStream 类压缩的文件吗?

    我有一个 C 应用程序 它与基于 PHP 的 SOAP Web 服务进行通信以进行更新和许可 我现在正在开发一个反馈系统 供用户通过软件自动提交错误和跟踪日志 根据我之前发布的问题 我认为 Web 服务将是实现此目的的最佳方法 最有可能以最
  • Cron 作业的远程地址问题

    我需要获取访问者的IP 但是当cron运行时 它发现REMOTE ADDR是一个未定义的索引 事实上 当文件与 cron 一起运行时 没有远程地址 我该如何避免这个问题 PHP 有没有办法说 如果 REMOTE ADDR 存在则考虑它 如果
  • Symfony/Form:函数 DoctrineType::__construct() 的参数太少

    我有一个奇怪的错误 我在自己的系统中实现了 Form 组件 我在那里创建了一个 FormType 其中使用 EntityType 作为字段 每次我想用 formBuilder 创建表单时 它都会抛出以下错误 Fatal error Unca
  • 计算帖子中使用 WordPress 短代码的次数

    我有以下 WordPress 短代码功能 function wp shortcode static i 1 return i i return return add shortcode shortcode wp shortcode 这很好用
  • 如何从文件中获取整个函数

    好的 我现在正在逐行阅读一个文件 我知道文件中的每个函数名称 因为它是在 XML 文档中的其他位置定义的 应该是这样的 function function name 其中 function name 是函数的名称 我从 XML 文档中获取所
  • 不区分大小写的 array_unique

    我正在尝试编写几行代码来创建一个不区分大小写的数组唯一类型函数 这是我到目前为止所拥有的 foreach topics as value lvalue strtolower value uvalue strtolower value if
  • 类 Doctrine\Common\Collections\ArrayCollection 不是有效的实体或映射的超类

    我有三个实体 特征值 php
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • WordPress 子主题覆盖父主题包括

    我正在创建 WordPress 子主题 需要覆盖某些小部件模板 我正在尝试使用此方法来覆盖父主题调用 覆盖主题功能的正确方法 http www venutip com content right way override theme fun
  • 一次用 \r\n & \n & \r 分解字符串? [复制]

    这个问题在这里已经有答案了 我想按行分割字符串 但我希望它基于所有主要使用的换行符 n r n r 并返回一个包含每一行的数组 您可以使用正则表达式和preg split http php net preg split反而 lines pr
  • 即使在双引号内或使用 PHP_EOL,PHP echo 也不打印换行符

    这是一张照片剪辑 我认为它很清楚 这真让我抓狂 我似乎无法让 php 在我的本地主机 使用 xampp 或在线 PHP 解释器上打印换行符 如果你想在 php 中使用 HTML 标签 试试这个 echo dkljaks aalksja kl
  • 从 URL 任何文件类型创建图像

    我知道imagecreatefromgif https www php net manual en function imagecreatefromgif php imagecreatefromjpeg https www php net
  • Laravel 4.2 Composer 安装错误:“无法扫描类”

    我想通过 Composer 在新的 Laravel 4 2 安装上安装一些软件包 但是 我遇到了例外 这是我的作曲家文件 name laravel laravel description The Laravel Framework keyw
  • 为什么 0.5 mod 0.1 在不同的编程语言中结果不同?

    我有一个关于模数的问题 模运算求一个数除以另一个数的余数 我原本期望 0 5 0 1 0 的结果 但是当我在 PHP 或 net 中运行它时 我得到 0 1 我运行的 php 代码是 var dump fmod 0 5 0 1 在 net中
  • Yii2:无法将列值更新+1

    创建新记录时 我需要将列值更新 1 public function actionCreate model new CreateBookings if model gt load Yii app gt request gt post Yii
  • 通过 Facebook 图 api 点赞帖子

    你好 我对 facebook PHP SDK 没有什么问题 我想通过 facebook PHP SDK 点赞帖子或其他内容 我正在执行此代码 我认为它应该是正确的 但显然它不起作用 给定的错误代码是的 PHP SDK不知道这种POST请求

随机推荐