因为波本的问题被难住了好几天。
代码:
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 shell中,它就可以正常运行。更糟糕的是,它一直运行良好,直到它被插入其他地方。我不确定它现在是不是通过耳机插孔连接的,而不是以前的线路输出插孔。
不管怎样,我运行它时得到的错误是(总结到相关部分)
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音频文件格式不匹配
检测。剪辑信息:标题:科学家艺术家:酷玩专辑:A
血流成河:2002评论:类型:未知负载
字幕在/home/linaro/Music/Requested audio codec family中[mpg123]
(afm=mpg123)不可用。在编译时启用它。打开音频
解码器:[ffmpeg]ffmpeg/libavcodec音频解码器libavcodec版本
53.35.0(外部)不匹配头版本53.32.2音频:44100 Hz,2
ch,浮动,256.0 kbit/9.07%(比率:32002->352800)所选音频
编解码器:[ffmp3float]afm:ffmpeg(ffmpeg MPEG layer-3 audio)主页
目录不可访问:权限被拒绝AO:[pulse]Init失败:
连接被拒绝无法初始化音频驱动程序“pulse”Home
目录不可访问:权限被拒绝[AO_ALSA]ALSA lib:
pcm_hw.c:1293:(snd_pcm_hw_open)打开“/dev/snd/pcmC1D0p”失败(-22):
无效参数[AO_ALSA]回放打开错误:无效参数
未能初始化音频驱动程序“alsa”[AO SDL]Samplerate:44100Hz
频道:使用aalib音频驱动程序的立体声格式浮动[AO SDL]。[奥
SDL]不支持的音频格式:0x1d。[AO SDL]无法打开音频:否
可用的音频设备无法初始化音频驱动程序“sdl:aalib”
无法打开/初始化音频设备->没有声音。音频:无声音
视频:无视频
同样,如果我复制并粘贴它通过popen执行的命令到控制台中,它就会开始播放。如果通过-ao alsa,-ao pulse,-ao oss也会失败,这让我完全困惑。任何帮助都将不胜感激!
编辑:
Linux是linaro,基于使用arm CPU的Ubuntu12.04
最佳答案
这个问题最终变成了Jonas和alk建议的——权限。一路上的一些事情改变了它的运行方式,但归根结底,肮脏的解决方案只是包括
su - user -c ' mplayer ... '
接到电话。
关于c++ - mplayer突然不喜欢popen吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36111910/