2

Я не уверен, почему так сначала здесь ошибка

Array ( [0] => ffmpeg: error while loading shared libraries: libvpx.so.1: failed to map segment from shared object: Permission denied ) 

мой PHP

exec('ffmpeg -i /home/social/public_html/'.$key['upload_path'].' -threads 0  /home/social/public_html/'.$key['path'].$key['filename'].'.webm 2>&1',$out);

Я тоже пробовал

exec('/usr/bin/ffmpeg -i /home/social/public_html/'.$key['upload_path'].' -threads 0  /home/social/public_html/'.$key['path'].$key['filename'].'.webm 2>&1',$out);

Теперь, когда я ssh на сервер и запускаю ту же команду, она работает нормально.

вот мой FFMPEG

ffmpeg-1.0/ffmpeg
ffmpeg version 1.0 Copyright (c) 2000-2012 the FFmpeg developers
  built on Oct 22 2012 19:38:33 with gcc 4.4.6 (GCC) 20120305 (Red Hat 4.4.6-4)
  configuration: --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvpx --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-gpl --enable-postproc --enable-nonfree
  libavutil      51. 73.101 / 51. 73.101
  libavcodec     54. 59.100 / 54. 59.100
  libavformat    54. 29.104 / 54. 29.104
  libavdevice    54.  2.101 / 54.  2.101
  libavfilter     3. 17.100 /  3. 17.100
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'

Мне интересно, есть ли у кого-нибудь еще эта ошибка

2 ответа2

2

Я предполагаю, что вы пытаетесь запустить команду через веб-сервер. Потому что, если вы проверили, что ваш php-command-invocation работает, запустив php ffmpeg-invocation-script.php как "себя", то наиболее вероятная причина ошибки - неправильные права пользователя.

Ваш веб-сервер (apache?) работает от имени другого пользователя, а не от того, с кем вы вошли. Распространено ограничивать доступ к видео и аудио устройствам для пользователей, которые принадлежат к группам video и audio . Самое простое решение - добавить вашего пользователя apache или httpd в эти группы:

usermod -a -G video apache

Чтобы выяснить, кто работает ваш Apache, используйте это:

ps aux |grep [a]pache |tail -n1 | awk '{print $1}'

Чтобы перечислить все группы в вашей системе, используйте (посмотрите аудио и видео):

getent  group | sort | awk -F: '{print $1}'

Кроме того, у вас могут возникнуть проблемы с запуском вашего ffmped из PHP, так как PHP-скрипты обычно ограничены для запуска не дольше определенного времени (30 секунд или около того). Это параметр, который вы можете редактировать в конфигурации apache-php. В моей системе это можно найти здесь:

$ grep -Hn max_exec /etc/php/apache2-php5.3/php.ini
/etc/php/apache2-php5.3/php.ini:444:max_execution_time = 30

Есть также ограничения памяти. Вы найдете параметр для него в том же разделе, что и параметр max_execution_time.

0

У меня была похожая проблема, и ответ Ярослава мне очень помог в ее решении. Я случайно установил ffmpeg с пользователем 'root' в $ HOME ('/root/') через http://trac.ffmpeg.org/wiki/CompilationGuide/Centos, из-за чего ffpmeg не был доступен для пользователя PHP. Я решил переустановить его, следуя тому же руководству, но изменив «$ HOME» на «/usr/local», то есть установив по общему пути. «Магически» PHP тоже может выполнить это сейчас.

Ваша ошибка " ffmpeg: ошибка при загрузке общих библиотек: libvpx.so.1: не удалось сопоставить сегмент из общего объекта: разрешение запрещено " мне кажется очень похожей. Я думаю, ваш libvpx может быть установлен только с правами root. Хотя вы могли успешно выполнить свою команду в терминале SSH, PHP, возможно, не сможет выполнить ее, потому что она запускается другим пользователем, как @ Ярослав Рахматуллин очень хорошо объяснил.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .