FFmpeg解码USB摄像头MJPEG输出
一、FFmpeg解码流程:
1、注册所有容器格式和CODEC:avcodec_register_all();
2、查找对应的解码器:avcodec_find_decoder(AV_CODEC_ID_MJPEG);
3、分配编解码器参数数据结构avcodec_alloc_context3(AVCodec *codec);
4、对于部分编解码需要对上一步分配的数据结构进行初始化,因为某些参数在视频流中无效;
5、打开编解码器:avcodec_open2(AVCodecContext *ctx, AVCodec *codec, NULL);
6、为解码帧分配内存:AVFrame *frame = av_frame_alloc();
7、初始化编解码输入数据结构AVPacket:av_init_packet(AVPacket *packet);
8、将待解码的压缩视频数据放入数据结构AVPacket中:
(AVPacket)packet.data = inbuf(待解码视频数据缓存);
(AVPacket)packet.size = inbufsize(待解码视频数据长度);
9、调用解码函数开始解码:avcodec_decode_video2(AVCodecContext *ctx,AVFrame *frame,int *got,AVPacket *packet);
10、拷贝解码后的一帧数据,解码后的数据格式根据解码前的数据格式决定,例如,USB摄像头的MJPEG数据解码后是YUV422P格式,H264格式数据解码后是YUV420P格式;解码后的数据存放在AVFrame数据结构指向的缓存中,存放方式为:(AVFrame )frame->data[0]指向Y分量,(AVFrame )frame->data[1]指向U分量,(AVFrame )frame->data[2]指向V分量;(AVFrame )frame->linesize[0]、(AVFrame )frame->linesize[1]、(AVFrame )frame->linesize[2]分别为Y、U、V分量每行的长度。
————————————————
版权声明:本文为CSDN博主「light_in_dark」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/light_in_dark/article/details/56276799
本文来自博客园,作者:相对维度,转载请注明原文链接:https://www.cnblogs.com/wangjirui/p/16548638.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库