c语言如何读取avi文件,avilib库的使用
avilib库介绍
avilib顾名思义,是对avi文件处理的工具。他是一个使用c语言编写的库,可以很方便的对avi文件提取帧和生成avi视频文件。如下列出avilib库的代码。
2. avilib的使用
本文简单的使用avilib库,读取另外的一个数据接受和解析线程提取到的一帧图片,产生的一个avi视频文件。
首先这个项目是使用QT编写的,所以是一个使用c++编程语言开发的,而avilib库是使用c语言开发的。本项目又是基于linux操作系统的。所以要在qt的项目中引用c语言库 包含头文件的时候,一定要如下格式:
extern "C"
{
#include"avilib.h"
}
首先使用avilib自定以的结构体类型avi_t定义一个avi格式的文件描述符。
然后对这个文件描述符进行初始化操作,
绑定一个avi文件;
设置视频的尺寸和格式,还有帧率。
写入一帧图像
关闭文件,并且封装格式。
案例:
/*
*ToAviThread.h
*这是一个生成avi文件的线程类。
*
*/
#ifndef TOAVITHREAD_H
#define TOAVITHREAD_H
#include
extern "C"
{
#include"avilib.h"
}
class ToAviThread : public QThread
{
Q_OBJECT
public:
ToAviThread(QString aviFilePath="./avi");
~ToAviThread();
void stop();
protected:
void run();
public slots:
void mDealWithFrame(QByteArray);
private:
char *frameBuffer; //一帧的图片缓冲区,保存从其他线程发来的图片
long bytes; //帧的长度
avi_t *out_fd; //avilib库中定义的文件数据结构
char *filename; //要保存的文件名
volatile bool stopFlag;
QString toAviFilePath;
};
#endif // TOAVITHREAD_H
/*avi线程类的实现文件
*
*ToAviThread.cpp
*
*/
#include "toavithread.h"
#include
#include
#include
ToAviThread::ToAviThread(QString aviFilePath)
{
frameBuffer = NULL;
bytes = 0;
stopFlag = false;
toAviFilePath = aviFilePath;
}
ToAviThread::~ToAviThread()
{
AVI_close (out_fd);
}
/*
*qt中的一个槽函数,接受其他类的信号发来的一帧图像
*
*/
void ToAviThread::mDealWithFrame(QByteArray frame)
{
frameBuffer = frame.data();
bytes = frame.length();
}
void ToAviThread::run()
{
QString tmpFile= toAviFilePath+QDateTime::currentDateTime().toString("yyyy-MM-dd--hh:mm:ss")+".avi";
filename = tmpFile.toUtf8().data();//以当前时间定义文件名和路径
out_fd = AVI_open_output_file(filename); //把文件描述符绑定到此文件上
if(out_fd == NULL)
{
qDebug()<
}
AVI_set_video(out_fd,320,240,15,"MJPG");//设置视频文件的格式
while(!stopFlag)
{
if(frameBuffer != NULL && bytes !=0)
{
if(AVI_write_frame(out_fd,frameBuffer,bytes)<0)//向视频文件中写入一帧图像
{
qDebug()<
}else{
frameBuffer = NULL;
bytes = 0;
}
}
}
AVI_close (out_fd); //关闭文件描述符,并保存文件
}
//退出线程,
void ToAviThread::stop()
{
stopFlag = true;
}
c语言如何读取avi文件,avilib库的使用相关推荐
- R语言中读取xlsx文件的方法
R语言中读取xlsx文件的方法 安装包 install.packages("openxlsx") library(openxlsx) 文件名+sheet的序号 data<- ...
- [转载]vfw的AVI族函数读取AVI文件
#include "vfw.h"#pragma comment(lib, "vfw32.lib") #pragma comment(lib, "Win ...
- C语言如何读取txt文件(最新免费代码)
C语言如何读取txt文件(最新免费代码) 运行效果展示 第一步添加头文件 写函数 完整的代码 运行效果展示 第一步添加头文件 #include <stdio.h> 写函数 使用的API是 ...
- R语言批量读取txt文件并合并
气象数据处理-R语言批量读取txt数据并合并 处理地面气候资料日值数据集v3.0 数据集以月为单位存储,每个月是一个单独的文件,上图. 在处理数据过程中,我们往往会将单独的数据合并到一起做进一步分析, ...
- linux c++读取excel文件的库
1.libxls 该库只能读取xls文件 首先下载源码,地址:https://github.com/libxls/libxls 下载其Releases版本,如图所示,下载libxls-1.6.2.ta ...
- OpenCV读取AVI文件
问题:为什么我的电脑支持AVI或者能够播出AVI,但为什么使用cvCreateFileCapture函数总返回NULL呢? 答案:尽管是AVI文件,但也可能使用了某种codec,例如:MJPEG De ...
- matlab读取avi文件出错
1,出现问题 在使用matlab做实验的时候出现问题,具体信息如下: >> m2=aviread('C:/test.avi'); ??? Error getting frame data. ...
- c语言编程读取bmp文件数据,c语言读取BMP图片的RGB数据
BMP图片是位图(bitmap),一般未压缩,要读取BMP文件只要知道它的文件结构就可以了,具体格式可以百度或者google,就不多说了,几个重要的点在代码里面有注释. /** c语言读取位图信息 * ...
- c语言实现读取csv文件,并对数据进行分析。
总代码: ```c在这里插入代码片 #include <stdio.h> #include <stdlib.h> #include <string.h> struc ...
最新文章
- 阶乘C语言超出范围,阶乘新问题-题解(C语言代码)
- [Visual Studio] 未能完成操作 不支持此接口
- Django Tips
- python系列(四)python元组与字典
- 重新安装Jenkins
- 直播盒子源码与直播盒子APP如何对接自动发卡平台
- 道路-水系河流-铁路-人口等栅格数据获取途径
- c语言字符串内容匹配,C语言字符串匹配函数
- 博客迁移说明 : )
- 打地鼠游戏的制作与心得
- uniapp 微信支付功能
- Java代理(静态代理、JDK动态代理、CGLIB动态代理)
- Hbuilder上架苹果app流程(上)
- android 设置壁纸,Android 代码设置壁纸的方式,兼容各大ROM
- linux mysql insert into_MySQL的INSERT语句小结
- uni-app实战教程
- OKR之剑·总结篇01:如何开好一场OKR复盘会
- 《浪潮之巅》——当年摩托罗拉系统输在Java慢,Android赢在C++
- 应用统计432考研复试提问总结精简版【二】
- 设计模式与软考试题之状态模式(二)
热门文章
- 安卓数据恢复_19款数据恢复软件,全平台IOS+WIN+安卓+U盘+硬盘+SD卡......
- 用猎豹免费Wifi解决高校NetKeeper客户端不能共享网络的问题
- 【牛客刷题-算法】1-算法入门-数据结构-栈
- 微波射频学习笔记15-------了解1/4波长天线
- 贴片陶瓷天线原理 与 HFSS模型建立和仿真分析总结
- 计算机英语词汇带英标,小学英语词汇带英标(13页)-原创力文档
- 程序设计基础python答案_Python程序设计基础免费答案
- Xilinx XCKU115 FPGA 加速卡
- 下载工具你用那个?迅雷 or 网际快车
- 如何通过Python分析中国演员排名?他第一你认可吗?