Поток как HTML5 аудио или конвертировать.amr в.ogg

Я хочу транслировать аудио файлы.amr на моем сервере. Потратив пару часов на исследования, я понял, что это невозможно в текущем состоянии звука html5. После этой неутешительной находки я потратил несколько дополнительных часов на поиск простого способа конвертировать файлы.amr в.ogg с такими же неутешительными результатами.

Я шокирован тем, что после более чем 10-летнего использования не существует простого способа воспроизведения / преобразования файлов, закодированных в соответствии с этим стандартом, но кто-то может помочь мне найти подходящее решение? Самые близкие жизнеспособные варианты, кажется, sox и ffmpeg. В идеале я ищу краткий набор инструкций для преобразования.amr в.ogg непосредственно из php, но использование командной строки было бы хорошо.

Я собираюсь вникнуть в специфику использования этих двух библиотек, но подумал, что я опубликую здесь в надежде, что какая-то добрая душа может помочь просветить других, которые находятся в нехватке времени и поэтому не хотят тратить полдня на распутывание специфики варианта использования. о том, что должно быть простой задачей. Если кто-то еще не публикует сообщения, я сам отвечу на вопрос.

Вот некоторые из других "ответов", которые я нашел, которые привели меня к публикации здесь:

Если вы собираетесь пометить это как "не по теме" или закрыть вопрос по какой-либо другой причине, учтите следующее:

Поиск по https://superuser.com/search?q=convert%20.amr%20to%20.ogg, который указан по крайней мере в одной из вышеуказанных ссылок в качестве соответствующего форума для вопроса, (на сегодняшний день) приводит к 4 сообщений, ни один из которых даже удаленно не отвечает на этот вопрос.

Руководящие принципы публикации SO, как мне кажется, полностью согласуются с этим вопросом. Я озадачен тем, почему кто-то может закрыть вопросы, которые возникли в моем поиске. Я очень опытный разработчик, задаю вопрос, непосредственно связанный с работой по разработке, которую я выполняю, и был заблокирован проблемой, для которой я хотел бы предложить решение, чтобы помочь другим разработчикам, которые сталкиваются с подобными проблемами.

Тот факт, что в моем поиске ничего не возникло, чтобы спасти меня от долгих часов исследований, заставляет меня рассматривать это как достойный вопрос для SO. Пожалуйста, помогите восстановить мои чувства к этому сайту, который является ценным ресурсом, но оставил меня холодным из-за такого количества бессмысленных и, казалось бы, неизбирательных закрытий постов.

Спасибо...

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 в оболочку или поместить их в исполняемый скрипт, и он должен обо всем позаботиться. Возможно, вы захотите проверить наличие новейших версий каждого компонента и соответствующим образом обновить код. Вы также можете добавить другие библиотеки, если вы работаете с другими форматами файлов, но это сводилось к тому, что мне было нужно конкретно.

Вы также можете использовать:

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

и удалите первый блок кода в сценарии установки, если у вас установлен git, или если у вас нет ни git, ни curl, вы можете просто скачать каждый из них и загрузить на свой сервер или использовать fget или что-то подобное.

В целом, это заняло несколько часов поиска файлов, отслеживания ошибок компиляции, отслеживания правильных параметров для моего сценария и других аспектов этого вида скуки, которые составляют худшее из того, что мне меньше всего нравится в работе разработчиков. Я надеюсь, что этот пост может спасти других от такой ненужной боли и страданий:-)

Другие вопросы по тегам