JavaCpp FFMpeg Examples -1
1.(avio_reading)
从内存中读取音视频文件,本示例可以深入改造成从udp或者tcp中获取文件
Java代码
@Test
public void test_avio_reading() throws Exception {
String sourceFilePath = home + "wexin.mp4";
try (FileInputStream is = new FileInputStream(sourceFilePath)) {
AVFormatContext inputContext = avformat.avformat_alloc_context();
int avio_ctx_buffer_size = 4096;
BytePointer buffer = new BytePointer(avutil.av_malloc(avio_ctx_buffer_size));//必须要调用av_malloc
AVIOContext avIOContext = avformat.avio_alloc_context(buffer, avio_ctx_buffer_size, 0, null, new Read_packet_Pointer_BytePointer_int() {
@Override
public int call(Pointer opaque, BytePointer buf, int buf_size) {
try {
byte[] b = new byte[buf_size];
int size = is.read(b, 0, buf_size);
if (size < 0) {
return 0;
} else {
buf.put(b, 0, size);
return size;
}
} catch (Throwable t) {
System.err.println("Error on InputStream.read(): " + t);
return -1;
}
}
}, null, null);
inputContext.pb(avIOContext);
if (avformat.avformat_open_input(inputContext, (BytePointer) null, null, null) < 0) {
throw new RuntimeException("打开文件失败");
}
avformat.avformat_find_stream_info(inputContext, (PointerPointer<?>) null);
avformat.av_dump_format(inputContext, 0, "", 0);
avformat.avformat_close_input(inputContext);
}
}