java—用ffmpeg将音频包写入磁盘

mctunoxg  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(213)

我有个问题!
我的回调函数是每50个数据包工作一次,对于另一个.ogg,它是每100个数据包工作一次,或者别的什么,我的意思是它和帧速率有关(注意:它不是跳过,它在写入磁盘之前缓冲了那么多数据包),但我想要的是每个数据包一个接一个地写入磁盘,而不是50或其他。
正在读取数据包:

AVPacket pkt = new AVPacket();
        while (av_read_frame(inputFormatContext, pkt) >= 0) 
        {
            ret = av_write_frame(outputFormatContext, pkt);
            if (ret != 0) {
                System.out.println("Write frame is failed ");
            }
            av_packet_unref(pkt);       
        }

回拨:

static class WriteCallback extends Write_packet_Pointer_BytePointer_int {
        @Override public int call(Pointer opaque, BytePointer buf, int buf_size) {
            try {

                File dir = new File("audio_parts");
                if (!dir.exists()) {
                    dir.mkdir();
                }

                FileOutputStream fos = new FileOutputStream(dir.getAbsolutePath() + "/audio_file_part" + fileCount);

                byte[] b = new byte[buf_size];
                buf.get(b, 0, buf_size);
                fos.write(b, 0, buf_size);

                fos.close();
                fileCount++;
                return buf_size;
            }
            catch (Throwable t) {
                System.err.println("Error on OutputStream.write(): " + t);
                return -1;
            }
        }
    }

可以一个一个地写吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题