ffmpeg - 缺少 .ogg 音频数据包
问题描述
我用 .ogg 读取数据包,av_read_frame
然后用 .ogg 写入磁盘av_write_frame
。
while (av_read_frame(inputFormatContext, pkt) >= 0)
{
ret = av_write_frame(outputFormatContext, pkt);
if (ret != 0) {
System.out.println("Write frame is failed ");
}
}
这是我的回调函数av_write_frame
。
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.flush();
fos.close();
fileCount++;
return buf_size;
}
catch (Throwable t) {
System.err.println("Error on OutputStream.write(): " + t);
return -1;
}
}
}
该代码运行良好,但有些东西我没有得到它。对于这个 .ogg 文件,回调必须每 50 个数据包工作一次。
但它的工作如下:
0-100
100-150
150-200
200-250
...
time_base = 48000 和数据包pts:
0. packets = -120
49. packet = 47880
99. packet = 95,760
结果第一秒我的包丢失了(第一包和第二包没有合并)。这可能是什么原因?
解决方案
推荐阅读
- java - Eclipse 无法在 Raspberry Pi 4 上运行:java.lang.ClassNotFoundException
- swift - 将 Codable 转换为 Json(字典)Swift
- java - 有没有办法增加 Maven pom.xml 的属性值?
- node.js - es6节点未正确导入
- drupal - URI 'http://' 在 Drupal\Core\Url::fromUri() 中格式错误
- java - JNIEnv FindClass 找不到我的包类
- ssis - 如何仅提取 TIME 的 DATETIME 字段并将其转换为 ssis (ssdt) 中的 INT
- c# - 使用 SSRS 渲染扩展发送自定义 HTTP 标头
- node.js - 在我的 Node 应用程序中,请求参数在 Docker 容器外部按预期返回,但在容器内部读取为未定义。发生了什么?
- postgresql - 在 jOOQ 更新中使用 jsonb_set