FFmpeg解码USB摄像头MJPEG输出
来源:互联网 发布:苹果提示无法加入网络 编辑:程序博客网 时间:2024/05/21 10:56
一、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分量每行的长度。
二、移植FFmpeg出现的问题
1、安装目录下FFmpeg/include/libutil/common.h该头文件报错:
(1)error: #error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS
(2) error: ‘UINT64_C’ was not declared in this scope
报错原因:common.h头文件中存在如下条件编译:
#if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) && !defined(UINT64_C)error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS#endif
该条件编译是告诉开发人员在c++环境下要定义__STDC_CONSTANT_MACROS,同时还需要定义UINT64_C。
2、解决方法:在common.h头文件中添加如下内容
#define __STDC_CONSTANT_MACROS#define UINT64_C(value) __CONCAT(value,ULL)
- FFmpeg解码USB摄像头MJPEG输出
- ffmpeg解码mjpeg格式数据接口介绍
- Linux环境下使用V4L2+opencv以MJPEG格式读取USB摄像头并实时显示
- Linux环境下使用V4L2+opencv以MJPEG格式读取USB摄像头并实时显示
- NVIDIA Jetson TX1 系列开发教程之九:USB摄像头MJPEG格式图像采集
- Linux环境下使用V4L2+opencv以MJPEG格式读取USB摄像头并实时显示
- Ubuntu V4l2中摄像头输出Mjpeg数据在Qt中显示
- mjpeg的解码和播放
- 关于c#调用usb摄像头的回调码流解码问题
- 使用ffmpeg捕获USB外部摄像头视频流
- USB摄像头视频相关ffmpeg,rtp,mjpg-streamer
- 基于DirectShow和FFmpeg的USB摄像头监控软件
- 使用ffmpeg捕获USB外部摄像头视频流实时播放
- 使用ffmpeg捕获USB外部摄像头视频流
- ffmpeg从USB摄像头采集一张原始图片
- Linux下用FFMPEG采集usb摄像头到RTMP
- 普通摄像头的数据输出格式YUV与mjpeg之间联系、DCT离散余弦变换去噪跟压缩
- 普通摄像头的数据输出格式YUV与mjpeg之间联系、DCT离散余弦变换去噪跟压缩
- SpringMVC
- VS调试时JSON格式文件加载不了,含有cmd命令(可直接粘贴)
- ASP.Net MVC默认的过滤器
- 自定义View之捆绑控件
- Java中的IO(面试有时会问java io的问题)
- FFmpeg解码USB摄像头MJPEG输出
- MySQL的B-Tree索引和Hash索引的区别
- headfirst设计模式(2)—观察者模式
- slab为什么要进行着色处理
- 正则表达式的基本原理
- javascript基础--学习笔记
- Appium学习遇到的坑
- 性能测试总结(三)--工具选型篇
- 【HPUoj】Translate(思维)