JavaCpp-FFMpeg avio_reading Example

JavaCpp FFMpeg Examples -1

1.(avio_reading)
从内存中读取音视频文件,本示例可以深入改造成从udp或者tcp中获取文件

c语言代码链接

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);
		}
	}

你可能感兴趣的:(ffmpeg,java)