Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 正在寻找一种逐帧编码和解码h.264视频的方法_Video_Encoding_H.264 - Fatal编程技术网

Video 正在寻找一种逐帧编码和解码h.264视频的方法

Video 正在寻找一种逐帧编码和解码h.264视频的方法,video,encoding,h.264,Video,Encoding,H.264,我试图解决的问题涉及使用自定义传输通过网络发送视频。也就是说,我需要压缩视频,但实际传输不是标准协议,但是,我仍然需要对帧进行打包。我正在寻找的是一种方法,将输入源的单个帧抓取传递到编码器,通过网络传输编码输出,然后在另一端将帧解码为某种图像(首选标准位图)。我需要使用h.264,但不需要特定的语言。我的平台是Linux 我研究了ffmpeg和vlc,但我看到的唯一编码和解码功能是整个文件。一、 不幸的是,在编码时没有完整的文件可供我使用。我只需要一张一张的图片 大概是这样的: byte[] i

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

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

大概是这样的:

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

有人知道这样做的方法吗?非常感谢您的帮助。

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

我会为您的专有协议/格式编写自己的ffmpeg muxer/demuxer,或者至少对h.264比特流使用其rtp打包

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

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

  • 为这些结构调用av_寄存器输出格式/av_寄存器输入格式

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

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


使用h.264进行单个帧编码可能有点过头了。H.264是为对多组图片进行编码而设计的,因为如果只对一帧进行编码,所有这些功能(如I/P/B帧、多参考帧、运动估计)都没有意义。事实上,结果流只包含I帧,所以我会考虑简单的JPEG编码来解决你的问题。在给定的比特率下,几乎所有的情况下,

H.264帧都优于JPEG。然而,单个图像编码通常更容易实现。您最终解决了上述问题吗?