【问题标题】:Stream as html5 audio or convert .amr to .ogg流式传输为 html5 音频或将 .amr 转换为 .ogg
【发布时间】:2013-07-12 16:03:59
【问题描述】:

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

我很震惊,经过 10 多年的使用,没有简单的方法可以播放/转换在此标准下编码的文件,但是有人可以帮我找到一个可用的解决方案吗?最接近的可行选项似乎是sox 和ffmpeg。理想情况下,我正在寻找一组简洁的指令,用于直接从 php 将 .amr 转换为 .ogg,但使用命令行就可以了。

我将深入研究使用这两个库的细节,但我想我会在这里发帖,希望一些善良的灵魂可以帮助启发其他人,因为时间有限,所以不想花一个下午来解开使用- 什么应该是一个简单的任务的案例细节。如果其他人不发帖,我会自己回答问题。

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

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

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

SO Posting Guidelines 在我看来完全符合这类问题。我很困惑为什么有人会关闭我搜索中出现的问题。我是一位非常有经验的开发人员,提出了一个与我正在做的开发工作直接相关的问题,并且被一个问题阻止了,我想提供一个解决方案来帮助其他被类似问题困扰的开发人员。

在我的搜索中没有任何结果可以使我免于进行数小时的研究,这一事实使我认为这是一个值得 SO 的问题。请帮助恢复我对这个网站的感情,这是一个宝贵的资源,但由于许多此类毫无意义且看似不分青红皂白的帖子关闭而让我感到寒冷。

谢谢...

【问题讨论】:

  • 我和你的情况完全一样。我了解这个问题的编程方面。我会尝试建议的解决方案,希望它对您有用。

标签: php audio ogg file-conversion amr


【解决方案1】:

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

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

或

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 或类似的东西。

总而言之,这相当于搜索文件、跟踪编译错误、跟踪我的场景的正确选项以及这种乏味的其他方面,这些都是我最不喜欢开发的最糟糕的方面工作。我希望这篇文章可以使其他人免于这种不必要的痛苦和折磨:-)

【讨论】:

  • 我很高兴你解决了你的问题并且足够关心在这里发布解决方案。我会尝试一下,看看是否对我有帮助,虽然我知道这对 IE 没有用,这个糟糕的浏览器不支持任何应该是通用的。
  • shell_exec() 不是从 php 运行的。返回空且未转换。
  • 按照这个添加ffmpeg到windows - adaptivesamples.com/how-to-install-ffmpeg-on-windows
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 2017-07-04
相关资源
最近更新 更多