【问题标题】:Looking for a way to encode and decode h.264 video on a frame by frame basis寻找一种逐帧编码和解码 h.264 视频的方法
【发布时间】:2013-09-18 04:15:08
【问题描述】:

我要解决的问题涉及使用自定义传输通过网络发送视频。也就是说,我需要压缩视频,但实际传输的不是标准协议,但是,我仍然需要对帧进行打包。我正在寻找一种将输入源的单个帧抓取传递到编码器,通过网络传输编码输出,然后在另一端将帧解码为某个图像(首选标准位图)的方法。我需要使用 h.264,但不需要特定语言。我的平台是 Linux。

我研究了 ffmpeg 和 vlc,但我看到的唯一编码和解码功能是针对整个文件的。不幸的是,我在编码时没有可用的整个文件。我一次只有一张图片。

类似这样的:

byte[] inputFrame = someImage;
byte[] encodedFrame = H264Encoder.EncodeNextFrame(inputFrame);
...Transmit frame
byte[] inputFrame = H264Decoder.DecodeNextFrame(encodedFrame);

有人知道这样做的方法吗?任何帮助将不胜感激。

【问题讨论】:

  • 你最终解决了上面的问题吗?

标签: video encoding h.264


【解决方案1】:

我会推荐 libavformat/libavcodec。这些是 ffmpeg 背后的库。可以在这里找到一个很好的起点http://dranger.com/ffmpeg/。它有点过时了,您需要查看文档以找到更新的调用约定。例如 av_open_input_file() 现在是 avformat_open_input()。

【讨论】:

    【解决方案2】:

    我会为您的专有协议/格式编写自己的 ffmpeg 复用器/解复用器,或者至少将其 rtp 打包用于 h.264 比特流。

    这并不像听起来那么可怕:

    • 使用一些常规信息(名称、支持的扩展名)、指向函数 write_header、write_packet、write_trailer(和 read_header、read_packet、read_close)的指针填充 AVOutputFormat/AVInputFormat 结构,

    • 为这些结构调用 av_register_output_format/av_register_input_format,

    • 在您的编码/解码过程中使用它们。

    我正在寻找的是一种传递单个帧抓取的方法

    也许将 h.264 用于单个帧编码有点过头了。 H.264 是为编码图片组而设计的,因为如果只编码一帧,所有这些特征,如 I/P/B 帧、多个参考帧、运动估计都没有意义。实际上,生成的流将仅包含 I 帧,因此我会考虑使用简单的 jpeg 编码来解决您的问题。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 2011-01-11
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多