Android和JNI,管道数据到FFmpeg

时间:2014-02-06 07:49:42

标签: java android ffmpeg java-native-interface

我正在尝试基于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?这可能吗?

1 个答案:

答案 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