【问题标题】:Android ffmpeg save and append h264 streamed videosAndroid ffmpeg 保存和附加 h264 流式视频
【发布时间】:2012-09-28 11:26:15
【问题描述】:

我需要保存由来自两个不同来源的两个视频流生成的视频文件。我在 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 视频。

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

【问题讨论】:

  • 你有没有找到在安卓中保存RTSP流的解决方案??

标签: android ffmpeg append h.264 rtsp


【解决方案1】:

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

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

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

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

【讨论】:

  • 我需要我的 android 应用程序自动执行此操作。要求用户使用命令行不会太友好。有没有办法在应用程序中做到这一点? C语言中
猜你喜欢
  • 2015-02-23
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 2011-06-29
  • 2011-08-20
  • 2012-08-03
  • 2016-11-06
相关资源
最近更新 更多