【问题标题】:Saving H.264 encoded data into file using ffmpeg使用 ffmpeg 将 H.264 编码数据保存到文件中
【发布时间】:2012-06-06 13:27:18
【问题描述】:

我有来自图像采集卡的 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())?

?

谢谢大家

【问题讨论】:

    标签: h.264 libavcodec libavformat


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      请查看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 );
      

      【讨论】:

      • 这很难回答,问题是关于打包而不是写入文件。
      猜你喜欢
      • 2014-09-08
      • 2011-10-30
      • 1970-01-01
      • 2011-12-03
      • 2015-07-19
      • 1970-01-01
      • 2013-06-06
      • 2017-06-23
      • 2013-02-06
      相关资源
      最近更新 更多