使用ffmpeg将H.264编码数据保存到文件中

时间:2012-06-01 09:46:29

标签: h.264 libavcodec libavformat

我有来自帧抓取器的H264数据。 使用这些数据,我已经编写了一个RTP / H264流媒体服务器(使用live555)和一个RTP / H264客户端(使用ffmpeg和live555)。

我想为我的服务器添加一项新功能:直接将编码的H264数据保存到文件(无转码),以任何格式(avi,mp4,mkv等),以便以后使用VLC观看视频。

对于显示客户端,基本上,我已执行:

1)使用ffmpeg / av_new_packet()

从H264数据构建数据包

2)解码H264数据ffmpeg / avcodec_decode_video2()

3)使用ffmpeg / sws_scale()

格式化解码帧

4)显示

有人可以快速通知我视频文件保存功能,而无需解码/转码数据并使用ffmpeg吗?

就足够了

1)选择输出上下文(格式)

2)使用ffmpeg / av_new_packet()

从H264数据构建数据包

3)使用ffmpeg / av_(interleaved)_write_frame()(以及av_write_trailer()和av_write_header())保存数据包?

谢谢大家

2 个答案:

答案 0 :(得分:0)

我做了类似的事;使用ffmpeg进行编码。我找到了ffmpeg remuxing示例1,它对我有用。 (现在回答已经太晚了,但我希望它会帮助其他人。)

答案 1 :(得分:-1)

请查看ffplay.c:

static int video_thread(void *arg)
{
...
ret = get_video_frame(is, frame, &pts_int, &pkt);
...
}

pkt是原始h264数据包。将pkt.data保存到文件即可。

fwrite(pkt.data, 1, pkt.size, pf );

如果此文件无法通过mplayer播放,请先添加:

unsigned char const start_code[4] = {0x00, 0x00, 0x00, 0x01};
fwrite(start_code, 4,1, pf );