繁体   English   中英

Android ffmpeg保存并附加h264流视频

[英]Android ffmpeg save and append h264 streamed videos

我需要保存由来自两个不同来源的两个视频流生成的视频文件。 我在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的任何设置方法,也找不到任何重用相同上下文的方法。 我本来想修改ffmpeg的资源,但是它们非常复杂,找不到我想要的东西。 一种替代方法是将两个视频保存到两个不同的文件中,但是我不知道以后如何添加它们,因为ffmpeg只能添加以mpeg编码的视频,并且重新编码视频不是一个真正的选择,因为这将需要很多时间。 另外,我找不到其他功能来附加两个用h264编码的mp4视频。

我很高兴听到任何有关此问题的有用想法。

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

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

  1. 使用相同的编解码器传输流[ts]
  2. .mpg文件
  3. 原始的h.264文件
  4. 具有完全相同的编码标头的原始mpeg4文件[标头中提到的相同尺寸,轮廓和工具集]
  5. H.263流

您不能直接串联mp4文件或3gpp文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM