Android ffmpeg保存并追加h264流媒体视频

时间:2012-10-08 08:26:20

标签: android ffmpeg append h.264 rtsp

我需要保存由来自两个不同来源的两个视频流生成的视频文件。我在tcp / ip上使用rtsp,视频用h264编码。 我需要先录制第一个来源的视频,然后继续第二个来源。 所以我尝试的是声明两个AVFormatContext实例,用avformat_open_input(&context, "rtsp://......",NULL,&options)初始化它们 然后用av_read_frame(context,&packet)读取帧 并将其写入视频文件av_write_frame(oc,&packet); 它可以很好地保存第一个来源的视频,但是如果我通过示例保存第一个上下文中的 y 帧,当我尝试从同一个文件中的第二个上下文中读取和保存帧时,第一个 y 框架我要保存, av_write_frame(oc,&packet2); 会重新调整-22 ,并且不会将帧添加到文件中。

我认为问题在于上下文变量会记住读取了多少帧,并且它为每个读取数据包提供了一个标识号,以确保它不会被写入两次。但是当我使用新的上下文重置这些标识号时,AVOutputFormat或AVFormatContext也保留了它们期望接收的包的id,并且在它们收到具有该id的包之前不会写任何内容。 现在我想知道如何解决这个不便之处。我找不到该id的任何setter,或以任何方式重用相同的上下文。我想修改ffmpeg来源,但它们非常复杂,我找不到我想要的东西。 另一种方法是将两个视频保存在两个不同的文件中,但之后我不知道如何追加它们,因为ffmpeg只能附加用mpeg编码的视频并且重新编码视频并不是一个真正的选项,因为它需要很多时候此外,我找不到任何其他功能方式来附加两个用h264编码的mp4视频。

我很高兴听到这个问题的任何可用的想法。

1 个答案:

答案 0 :(得分:1)

如果要保存原始h.264流,为什么不简单地存储两个单独的流,然后使用系统命令系统(“cat file1 file2> finalfile”)分别在命令行上连接文件块

如果您的输出是以下之一,则可以使用cat

直接追加
  1. 使用相同编解码器传输流[ts]
  2. .mpg文件
  3. 原始h.264文件
  4. 原始mpeg4文件具有完全相同的编码标题[标题中提到的相同尺寸,配置文件和工具集]
  5. H.263流
  6. 您不能直接连接mp4文件或3gpp文件。