郑州专业的建网站,wordpress 前端投稿,外贸累网站,html页面代码avi 视频的视频流编码必须是jpeg#xff0c;或者mjpg
直接用摄像头录取的视频都是这两种格式#xff0c;不能用ffmpeg转成avi的视频。
#include stdio.h
#include sys/types.h
#include sys/stat.h
#include fcntl.h
#include stdlib.…avi 视频的视频流编码必须是jpeg或者mjpg
直接用摄像头录取的视频都是这两种格式不能用ffmpeg转成avi的视频。
#include stdio.h
#include sys/types.h
#include sys/stat.h
#include fcntl.h
#include stdlib.h
#include unistd.h
#include sys/ioctl.h
#include linux/videodev2.h
#include string.h
#include sys/mman.h
static int zz1;int main(void){struct strf{unsigned char id[4]; //块ID固定为strfunsigned int size; //块大小等于struct avi_strf_chunk去掉id和size的大小unsigned int size1; //size1含义和值同size一样unsigned int width; //视频主窗口宽度单位像素unsigned int height; //视频主窗口高度单位像素unsigned short planes; //始终为1unsigned short bitcount; //每个像素占的位数只能是1、4、8、16、24和32中的一个unsigned char compression[4]; //视频流编码格式如JPEG、MJPG等unsigned int image_size; //视频图像大小等于width * height * bitcount / 8unsigned int x_pixels_per_meter; //显示设备的水平分辨率设为0即可unsigned int y_pixels_per_meter; //显示设备的垂直分辨率设为0即可unsigned int num_colors; //含义不清楚设为0即可unsigned int imp_colors; //含义不清楚设为0即可}str;FILE *ffopen(/home/wzpc/Videos/tra_mjpg.avi,rb); //必须是JPEGMJPG格式的aviif(fNULL){puts(file error);exit(-1);}fseek(f,0,SEEK_END);int fsizeftell(f);fseek(f,0,SEEK_SET);int fdfileno(f);char *mmmap(NULL,fsize,PROT_READ,MAP_SHARED,fd,0);for(int t0;tfsize;t){if((m[t]s)(m[t1]t)(m[t2]r)(m[t3]f)){memcpy(str,m[t],sizeof(str));printf(%d\n,str.bitcount);printf(%s\n,str.compression);printf(%d*%d\n,str.width,str.height);char r[]{M,J,P,G}; //avi 编码必须是jpegmjpgchar r1[]{J,P,E,G};int bjmemcmp(str.compression,r,4);int bj1memcmp(str.compression,r1,4);if((bj0)||(bj10)){zz0;}}}if(zz!0){puts(no zc);exit(-1);}for(int t0;tfsize;t){if((m[t]0)(m[t1]0)(m[t2]d)(m[t3]c)){char file[10]{};sprintf(file,%d,t);chdir(/home/wzpc/Pictures/pic_avi); //存储图片的目录FILE * fofopen(file,wb);if(foNULL){puts(fo error);exit(-1);}int k;memcpy(k,m[t4],4);fwrite(m[t8],k,1,fo); //直接从mmap中读数据到文件fclose(fo);}}munmap(m,fsize);return 0;
}