0

下面是 ffmpeg 命令的输出:# ./ffmpeg -y -f s16le -i /dev/snd/pcmC3D0c 1640.wmv - 在 Android 设备上从 Logitech 网络摄像头创建音频文件。

如输出所示,我收到一个File descriptor in bad state 错误,因为我将麦克风输入称为/dev/snd/pcmC3D0c我通过查看/proc/asound的内容确定了设备(网络摄像头麦克风)的值。网络摄像头麦克风是 card3,它的STREAM0文件表明麦克风的音频格式为S16_LE

格式还确认它是一个捕获设备,它的 pcm id 是pcmC3D0c(C3 是卡号,D0 是设备号. 然后我通过检查/dev/snd/目录来确认正确的设备,以确认其正确和完整的描述。/dev/snd 文件夹确认麦克风是/dev/snd/pcmC3D0c

然后我检查了权限和所有权以确保我可以使用该设备。因此,就识别要使用的正确设备而言,我相信/dev/snd/pcmC3D0c是正确的设备。我确实相信这个错误可能与操作系统有关,但是在所有这些检查之后,我仍然无法弄清楚是什么导致了错误的文件描述符状态错误。

请注意,我测试了不同的输出格式等,但没有任何区别。有什么线索或建议吗?

# ./ffmpeg -y -f s16le -i /dev/snd/pcmC3D0c 1640.wmv

ffmpeg 版本 N-43170-gd84dd35 版权所有 (c) 2000-2012 FFmpeg 开发人员于 2012 年 8 月 24 日 09:16:05 使用 gcc 4.4.3 (GCC) 配置构建:--enable-cross-compile --arch=arm - -cpu=cortex-a9 --target-os=linux --enable-runtime-cpudetect --prefix=/output --enable-pic --cross-prefix=/home/jasongipsyblues/Desktop/apps/android-ndk- r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi---sysroot=/home/jasongipsyblues/Desktop/apps/android-ndk-r8b/platforms/android -14/arch-arm --enable-version3 --enable-gpl --enable-memalign-hack --disable-doc --enable-yasm --enable-libx264 --enable-zlib --extra-cflags=- I../x264 --extra-ldflags='-L../x264 -lc'

libavutil 51. 66.100 / 51. 66.100
libavcodec 54. 48.100 / 54. 48.100
libavformat 54. 22.100 / 54. 22.100
libavdevice 54. 2.100 / 54. 2.100
libavfilter 3. 5.102 / 3. 5.102
libswscale 2. 1.100 / 2. 1.100
libswresample 0. 15.100 / 0. 15.100 [libpostproc 6 2.0.s
]

@ 0xfd84f0] 使用默认值 44100 指定的无效采样率 0
[s16le @ 0xfd84f0] 从比特率估计持续时间,这可能是不准确
的 输入流 #0.0 的猜测通道布局:单声道
输入 #0,s16le,来自'/dev/snd/pcmC3D0c ':
持续时间:N/A,比特率:705 kb/s
流 #0:0:音频:pcm_s16le,44100 Hz,单声道,s16,705 kb/s
输出 #0,asf,到 '1640.wmv':
元数据:WM/EncodingSettings:Lavf54.22.100 Stream #0:0:音频:wmav2 (a[1][0][0] / 0x0161),44100 Hz,单声道,s16,128 kb/s 流映射:Stream #0 :0 -> #0:0 (pcm_s16le -> wmav2)
按 [q] 停止,[?] 寻求帮助
/dev/snd/pcmC3D0c: 文件描述符处于错误状态
大小= 1kB 时间=00:00:00.00 比特率= 0.0kbits/s
视频:0kB 音频:0kB 字幕:0 全局标题:0kB 复用开销 5340.000000%

4

1 回答 1

0

您可能需要引入操作系统管道来处理实时音频... ffmpeg 有详细记录的使用管道的脚本示例。

这里

根据您的情况,除了 ffmpeg 之外,您还可以查看 VLC。

于 2012-08-25T14:49:38.723 回答