Несколько дней был озадачен проблемой с popen.
Код:
int main(){
FILE *fp = popen("mplayer /home/linaro/Music/cp.mp3", "r");
char buffer[1028];
while (fgets(buffer, 1028, fp) != NULL)
{
std::cerr<<buffer;
}
pclose(fp);
fp = 0;
return 0;
}
был запущен в магазине на встроенном контроллере linaro. Побежал нормально, без ошибок. Несмотря на то, что код прост (просто играет холодную песню при исполнении, а затем выходит), мне кажется, что это вызывает у меня больше горя, чем можно подумать.
Если я скопирую и вставлю саму команду в обычную оболочку bash, она будет работать нормально. И что еще хуже, он работал нормально, пока он не был подключен где-то еще. Я не уверен, подключен ли он сейчас через гнездо для наушников по сравнению с тем, который был до гнезда линейного выхода.
Независимо от того, ошибка, которую я получаю, когда я ее запускаю (сводится к соответствующей части)
MPlayer svn r34540 (Ubuntu), собранный с gcc-4.6 (C) 2000-2012 MPlaye4
Команда mplayer: не удалось подключиться к сокету mplayer: такого файла нет или
каталог Не удалось открыть поддержку LIRC. Вы не сможете использовать
ваш пульт дистанционного управления.
Воспроизведение /home/linaro/Music/cp.mp3 libavformat версии 53.21.1
(внешний) Несоответствие версии заголовка 53.19.0 Формат файла только аудио
обнаружено. Информация о клипе: Название: The Scientist Исполнитель: Coldplay Альбом: A
Rush Of Blood To The Head Год: 2002 Комментарий: Жанр: неизвестен Загрузить
субтитры в / home / linaro / музыка / запрашиваемое семейство аудиокодеков [mpg123]
(afm = mpg123) не доступно. Включить его при компиляции. Открытие аудио
декодер: [ffmpeg] FFmpeg / libavcodec аудио декодеры версия libavcodec
53.35.0 (внешний) Несоответствие версии заголовка 53.32.2 АУДИО: 44100 Гц, 2
ch, floatle, 256,0 кбит / 9,07% (соотношение: 32002-> 352800) Выбранное аудиокодек: [ffmp3float] afm: ffmpeg (FFmpeg MPEG layer-3 audio)
каталог недоступен: в доступе отказано AO: [импульс] инициализация не удалась:
Соединение отклонено. Не удалось инициализировать звуковой драйвер.
каталог недоступен: в доступе отказано [AO_ALSA] alsa-lib:
pcm_hw.c: 1293: (snd_pcm_hw_open) открыть «/ dev / snd / pcmC1D0p» не удалось (-22):
Неверный аргумент [AO_ALSA] Ошибка открытия воспроизведения: Неверный аргумент
Не удалось инициализировать аудиодрайвер ‘alsa’ [AO SDL]. Частота дискретизации: 44100 Гц
Каналы: плавающий стереоформат [AO SDL] с использованием аудио драйвера aalib. [AO
SDL] Неподдерживаемый аудиоформат: 0x1d. [AO SDL] Невозможно открыть аудио: Нет
доступное аудиоустройство Не удалось инициализировать аудио драйвер ‘sdl: aalib’
Не удалось открыть / инициализировать аудиоустройство -> нет звука. Аудио: нет звука
Видео: нет видео
Опять же, если я скопирую и вставлю точную команду, которую он выполняет через popen, в консоль, он начнет играть. Это терпит неудачу, если передать -ao alsa, -ao импульса, -ao oss, а это, что меня полностью поставили в тупик. Любая помощь будет оценена!
Редактировать:
Linux — это linaro, основанный на Ubuntu 12.04 с использованием arm CPU
Проблема закончилась, как предложили Джонас и Алк — разрешения. Что-то на этом пути изменило ход, но в конце концов грязное решение было просто включить
su - user -c ' mplayer ... '
На вызываемую линию.
Других решений пока нет …