我正在尝试基于FFmpeg创建元数据检索器。由于原始Android应用程序资源通常只能使用文件描述符访问,因此我需要一种方法通过JNI将此数据传输到FFmpeg。我知道FFmpeg支持“管道”协议:
UNIX pipe access protocol.
Allow to read and write from UNIX pipes.
The accepted syntax is:
pipe:[number]
number is the number corresponding to the file descriptor of the pipe (e.g. 0 for stdin, 1 for stdout, 2 for stderr). If number is not specified, by default the stdout file descriptor will be used for writing, stdin for reading.
For example: cat test.wav | ffmpeg -i pipe:0
我的问题是,如何使用JNI和avformat_open_input使用FileDescriptor以编程方式模拟cat test.wav | ffmpeg -i pipe:0
?这可能吗?
答案 0 :(得分:1)
来自AndroidFFmpeg项目的人员实施了“jni://”协议来通过JNI流式传输数据,请参阅https://github.com/appunite/AndroidFFmpeg/blob/master/FFmpegLibrary/jni/jni-protocol.c
我不知道它是如何使用的,只是我遇到了那个文件,看到了你的问题。我想你可以使用相同的解决方案。
您可以查看以下帖子:https://stackoverflow.com/a/24747137/1028256关于将FileDescriptor
传递给JNI