android - "File descriptor in bad state"在android设备上运行ffmpeg并选择输入设备时出错

标签 android file-io ffmpeg

下面是 ffmpeg 命令的输出:# ./ffmpeg -y -f s16le -i/dev/snd/pcmC3D0c 1640.wmv -to create an audio file from a Logitech webcam on an android device. 如输出所示,我收到一个文件描述符处于错误状态错误,因为我将麦克风输入称为/dev/snd/pcmC3D0c 我通过查看/proc/asound 的内容确定了设备(网络摄像头麦克风)的值。网络摄像头麦克风是 card3,它的 STREAM0 文件表明麦克风的音频格式为 S16_LE 格式。还确认它是一个捕获设备,它的 pcm id 是 pcmC3D0c(C3 是卡号,D0 是设备号。然后我通过检查/dev/snd/目录来确认正确的设备以确认其正确和完整的描述。/dev/snd 文件夹确认麦克风是/dev/snd/pcmC3D0cI 然后检查权限和所有权以确保我可以使用该设备。因此,就识别要使用的正确设备而言,我确实相信/dev/snd/pcmC3D0c 是正确的设备。我相信这个错误可能与操作系统有关,但是毕竟这些检查,我仍然无法弄清楚是什么导致了错误的文件描述符状态错误。请注意,我测试了不同的输出格式等,但没有任何区别。有什么线索或建议吗?

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

ffmpeg version N-43170-gd84dd35 Copyright (c) 2000-2012 the FFmpeg developers built on Aug 24 2012 09:16:05 with gcc 4.4.3 (GCC) configuration: --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 52. 0.100 / 52. 0.100

[s16le @ 0xfd84f0] Invalid sample rate 0 specified using default of 44100
[s16le @ 0xfd84f0] Estimating duration from bitrate, this may be inaccurate
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, s16le, from '/dev/snd/pcmC3D0c':
Duration: N/A, bitrate: 705 kb/s
Stream #0:0: Audio: pcm_s16le, 44100 Hz, mono, s16, 705 kb/s
Output #0, asf, to '1640.wmv':
Metadata: WM/EncodingSettings: Lavf54.22.100 Stream #0:0: Audio: wmav2 (a[1][0][0] / 0x0161), 44100 Hz, mono, s16, 128 kb/s Stream mapping: Stream #0:0 -> #0:0 (pcm_s16le -> wmav2)
Press [q] to stop, [?] for help
/dev/snd/pcmC3D0c: File descriptor in bad state
size= 1kB time=00:00:00.00 bitrate= 0.0kbits/s
video:0kB audio:0kB subtitle:0 global headers:0kB muxing overhead 5340.000000%

最佳答案

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

here

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

关于android - "File descriptor in bad state"在android设备上运行ffmpeg并选择输入设备时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12118382/

相关文章:

bash - 将 ffmpeg 应用于许多文件

php - Laravel FFMPEG 中的条件格式

android - 使用 Android 客户端的 Orion Context Broker 上下文订阅

C# PCL 从文件中读取

android - 处理方向变化时的问题

c - 在 C 中写入位图文件头的问题

java - Java中Scanner的构建和使用

android - ffmpeg 混合以排除热门视频背景

android - Firestore 为什么在没有互联网权限的情况下工作?

Android 位图处理 - 没有泄漏但仍然 OOM?