【发布时间】: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