Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 通过JCodec或类似工具将Java 8 BuffereImage转换为MP4_Java 8_Mp4_Bufferedimage_Codec_Jcodec - Fatal编程技术网

Java 8 通过JCodec或类似工具将Java 8 BuffereImage转换为MP4

Java 8 通过JCodec或类似工具将Java 8 BuffereImage转换为MP4,java-8,mp4,bufferedimage,codec,jcodec,Java 8,Mp4,Bufferedimage,Codec,Jcodec,这里是Java8。当我提到JCodec时,我对任何有效的解决方案都持开放态度 在中,它们提供了一个不错的示例,说明了如何将缓冲区图像列表转换为磁盘上的MP4,如下所示: SeekableByteChannel out = null; try { out = NIOUtils.writableFileChannel("/tmp/output.mp4"); // for Android use: AndroidSequenceEncoder AWTSequenceEncod

这里是Java8。当我提到JCodec时,我对任何有效的解决方案都持开放态度


在中,它们提供了一个不错的示例,说明了如何将
缓冲区图像列表
转换为磁盘上的MP4,如下所示:

SeekableByteChannel out = null;
try {
    out = NIOUtils.writableFileChannel("/tmp/output.mp4");
    // for Android use: AndroidSequenceEncoder
    AWTSequenceEncoder encoder = new AWTSequenceEncoder(out, Rational.R(25, 1));
    for (...) {
        // Generate the image, for Android use Bitmap
        BufferedImage image = ...;
        // Encode the image
        encoder.encodeImage(image);
    }
    // Finalize the encoding, i.e. clear the buffers, write the header, etc.
    encoder.finish();
} finally {
    NIOUtils.closeQuietly(out);
}
我不想写入磁盘上的文件系统资源(例如“
/tmp/output.mp4
”),而是想写入内存缓冲区(完全兼容mp4),理想情况下是一个
字节[]
或将转换为
字节[]
的东西


这可能与JCodec有关吗(可能是
NIOUtils
或类似文件中的某个内容)?

您可以创建一个
seekablebytechnel
实现,该实现只需读取/写入内部
字节缓冲区或
字节[]
。或者,由于您使用的是NIO,如果您想避免写入SSD/HDD,可以使用。只需从内存文件系统中打开
文件通道
路径
,对其进行写入,然后读取字节。您可以通过
文件通道#open
静态方法之一正常打开
文件通道
。但是,请注意,
路径必须来自内存中的
文件系统
;这意味着您不能使用
路径#get
路径#创建
路径
。另外,我刚刚意识到JCodec有自己的
seekablebytechnel
(出于某种原因),这与
java.nio.channels.seekablebytechnel
不同。
FileChannel
实现了后者,这意味着您需要使用它。至于
ByteBufferSeekableByteChannel
,它与我的意思非常相似,只是它似乎无法调整大小。换句话说,它只能保存由构造过程中传入的
ByteBuffer
确定的一组字节数。如果您能够确定
ByteBuffer
的容量需要提前多少,那么就没有问题了。@Slaw我想,它使用自己的
seekablebytechnel
,因为标准的
seekablytechnel
是在Java7中引入的。