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