精华内容
下载资源
问答
  • 录像一帧数据大小

    千次阅读 2016-07-08 15:09:07
    一帧数据:1600*1200*3=5M 不压缩是5M 录像一秒会是15帧或者20帧,这里不压缩就要相乘,一般的不管图片是视频,在传到屏或者存储到本地,生产图片或者视频,头要经过压缩的。 视频的图片的压缩技术分:MPEG 即...

    1、GRB一个像素占8:8:8bit 也就是3B,24bit=3B
    YUV一个像素占4:4:4bit 也就是12bit =2B—-这一块还不太理解,猜测是这样的,有理解的朋友可以给个回复。
    一帧数据:1600*1200*3=5M 不压缩是5M
    录像一秒会是15帧或者20帧,这里不压缩就要相乘,一般的不管图片是视频,在传到屏或者存储到本地,生产图片或者视频,都要经过压缩的。
    视频的图片的压缩技术分:MPEG 即(MPEG-1;MPEG-2;MPEG-4);H.26X 即(H.261;;H.263;以及H.264);
    mpeg-1:20:1的压缩比例
    mpeg-2:
    mpeg-4:4000:1的压缩比例
    H.264:包含mpeg-4的压缩技术。

    展开全文
  • 可以读取H264文件,并从中提取每一帧(是完整一帧,不是NAL)的数据,并能获得视频的分辨率。
  • STM32串口接收一帧数据的写法,数据包括帧头,功能帧,数据帧,校验位!
  • 一帧数据接收方法

    千次阅读 2020-09-03 20:58:19
    最近在做485数据通讯,遇到一些通讯问题,特意去查找资料,一帧数据接收有三种方法,现分享如下: 第一种方法:根据帧头和帧尾进行校验, 串口发送2字节例如(AA ,BB),然后程序对每2个字节进行判断,例如设定一个...

    最近在做485数据通讯,遇到一些通讯问题,特意去查找资料,一帧数据接收有三种方法,现分享如下:
    第一种方法:根据帧头和帧尾进行校验,
    串口发送2字节例如(AA ,BB),然后程序对每2个字节进行判断,例如设定一个起始位例如AA,当程序收到AA,起始条件成立,开始接收数据,在设定一个终止位BB,当程序收到BB,终止条件成立,程序停止接受数据,然后把收到的数据放到一个数组里面,对收到的数据进行CRC校验,校验成立,则对收到的数据进行处理
    程序如下:

    if(USART_GetITStatus(RS485_USART_SOURCE, USART_IT_RXNE) != RESET)
    	{
    		USART_ClearITPendingBit(RS485_USART_SOURCE, USART_IT_RXNE);
    		
    		if(USART_GetFlagStatus(RS485_USART_SOURCE, USART_FLAG_ORE) != RESET) //Òç³ö´íÎó±ê־λ
    		{
    			USART_ClearFlag(RS485_USART_SOURCE, USART_FLAG_ORE);
    		}
    		
    		temp_rec = USART_ReceiveData (RS485_USART_SOURCE);
    	
    		switch(temp_rec)
    		{		
    			case __Start://ÊÕµ½Æðʼ룬½ÓÊÕÊý¾Ý¿ªÊ¼
    				if(!CommuSta.bRecOn)
    				{
    					CommuSta.bRecOn = SET;// ±íʾÕýÔÚ½ÓÊÕÊý¾Ý
    					len = 0;
    					aRxBuf[len++] = temp_rec;
    				}
    				break;
    
    			case __Stop://ÕÒµ½ÖÕֹ룬½ÓÊÕÊý¾Ý½áÊø
    				if(CommuSta.bRecOn)
    				{
    					CommuSta.bRecOn = RESET; // ½ÓÊÕÊý¾Ý½áÊø
    					CommuSta.bRecEnd = SET;  // Ò»Ö¡Êý¾ÝÊÕÍê
    
    					aRxBuf[len] = temp_rec;
    					gRecBufLen = ++len;
    					len = 0;
    				}
    				break;
    

    但是程序出问题了,原因是发送过来的指令起始位与终止位之间有字节与起始位或终止位相同,l例如7E(起始位) 01 B4 03 +CRC校验(CD 7E)+7F(终止位),CRC校验的7E与起始位相同,程序接收数据又重新开始,所以出错,因为是一个字节一个字节的接收数据,所以对帧头和帧尾进行判定有时会出错。
    第二种方法:使用串口帧空闲中断
    使能串口帧空闲中断,当接收一帧数据后,串口会产生一次中断,根据是否产生中断来判断是否接收一串完整的数据,这种方法不存在方法1的问题,推荐使用
    第三种方法:根据接收到的字符之间的间隔进行判断
    串口数传输都是使用标准波特率,因此串口传输一帧数据时,字符与字符之间的时间间隔是一个固定值,我们可以根据串口的波特率去计算串口每个字符的间隔时间,在数据接收的过程中判断接收的两个字节之间间隔大于3.5个字符间隔时间,则认为当前数据帧传输完毕

    展开全文
  • 介绍一下完整接收一帧数据的方法

    千次阅读 2021-11-15 19:01:10
    本文介绍3种使用串口接受一帧完整数据包的方法,串口接收数据是字节接收的,串口每接收1字节数据,产生一个串口中断,我们...帧头、帧尾表示一帧数据的开始和结尾,数据长度表示当前数据帧中负载数据大小,CRC16校验用

    本文介绍3种使用串口接受一帧完整数据包的方法,串口接收数据是字节接收的,串口每接收1字节数据,产生一个串口中断,我们在中断中将接收到的数据存放到buf中进行保存,但是数据的发送和接收都是按照帧为单位进行传输的,因此我们要在接收数据的同时判断当前接收的数据是否是完整的一帧。
    一般串口完整数据帧的定义:帧头(2字节,例如AA、BB) + 数据长度(2字节) + 数据 + CRC16校验(2字节) + 帧尾(2字节)
    帧头、帧尾表示一帧数据的开始和结尾,数据长度表示当前数据帧中负载数据大小,CRC16校验用来检查接收到的数据是否正确。
    第一种方法(根据帧头、帧尾进行判断):
    串口在接收数据时,我门在串口中断函数中对接收到的每一字节数据进行判断,如果检测到帧头数据(例如AA、BB),我们开始将接收到的数据存到buf中,同时记录下该帧数据的数据长度字段,然后一直接收,直到接收到的数据长度与我们记录下的数据长度字段值一致或接收到帧尾数据,到此一帧数据接收完成,将数据扔到消息队列,等待任务处理即可。
    假如接收的数据包格式如下 帧头(AA 、BB) + 数据长度 + 数据 + CRC校验 + 帧尾(CC、DD)
    void USART1_IRQHandler(void) //串口中断处理函数
    {
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    {
    buf[buf_size++] = USART_ReceiveData(USART1);
    if (buf_size >= 2)
    {
    if (buf[0] == 0xAA && buf[1] == 0xBB) //接收到帧头
    {
    //接收到帧尾
    if (buf[buf_size] == 0xCC && buf[buf_size-1] == 0xDD)
    {
    //此处为数据包处理逻辑
    buf_size = 0;
    memset(buf,0,BUF_SIEZ);
    }
    }
    else
    {
    buf_size = 0;
    memset(buf,0,BUF_SIZE);
    }
    }
    if(buf_size >= BUF_SIZE)
    {
    buf_size = 0;
    memset(buf,0,BUF_SIZE);
    }
    }
    }
    第二种方法(根据接收到的字符之间的间隔进行判断):
    串口数传输都是使用标准波特率,因此串口传输一帧数据时,字符与字符之间的时间间隔是一个固定值,我们可以根据串口的波特率去计算串口每个字符的间隔时间,在数据接收的过程中判断当字符间隔大于3.5个(modbus协议常用),则认为当前数据帧传输完毕,具体方法如下:
    我们先设置定时器超时时间为计算出的3.5字符间隔时间,然后在串口中断中每接收到一个字符,就将其保存至buf中,并刷新定时器计数值,如果串口接收到的数据时间间隔大于3.5个字符间隔,定时器就会进入超时中断,我们在定时器中断中判断当前buf中的数据是否完整,如果完整,则扔到消息队列中,等待任务去处理。
    //本例中,如果串口字符间隔大于3ms,我们认为一帧数据接收完毕,如果使用的协议是Modbus 协议,则时间间隔应该设置为3.5字符间隔时间。
    #define BUF_SIZE 128 // 定义串口接收buf 长度
    typedef enum {DISABLE = 0, ENABLE = !DISABLE} ; //定义枚举类型
    u16 buf_size = 0;
    u8 buf[BUF_SIZE] = {0}; //定义串口接收缓存区
    u16 TimerCount = 0;
    u8 TimerEnable = ENABLE; //定义定时器计数使能标志位
    void USART1_IRQHandler(void) //串口中断处理函数
    {
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //判断是否接收中断标志位置位
    {
    buf[buf_size++]= USART_ReceiveData(USART1); //将接收到的数据存入buf
    TimerCount=0;
    TimerEnable = ENABLE; //置位定时器计数使能标志位
    if(buf_size >= BUF_SIZE)
    {
    buf_size = 0; //接收数据缓冲区溢出,重新开始接收
    memset(buf,0,BUF_SIZE);
    }
    }
    }
    void TIM1_IRQHandler(void) //定时器中断处理函数 每1ms产生一次中断
    {
    u8 cnt = 0;
    if(TIM_GetITStatus(TIM1 , TIM_IT_Update) != RESET )
    {
    TIM_ClearITPendingBit(TIM1 , TIM_FLAG_Update); //清除定时器中断标志位
    if(TimerEnable == ENABLE)
    {
    TimerCount++;
    if(TimerCount > 3) //大于3ms,则判断为一帧数据接收完成
    {
    TimerCount = 0;
    Timer.Enable = DISABLE;
    //此处为数据包处理逻辑
    buf_size = 0;
    memset(buf,0,BUF_SIZE);
    }
    }
    }
    }
    第三种方法(使用串口帧空闲中断,推荐使用):
    串口IDLE中断,串口接收完完整的一帧数据自身产生的中断,配置使能该中断后,串口会判断总线上一个字节的时间间隔内有没有再次接收到数据,如果没有则当前一帧数据接收完成,产生IDLE中断。
    使用方法,原串口配置不变,添加下列语句,开启IDLE中断:
    #define BUF_SIZE 128 // 定义串口接收buf 长度
    u16 buf_size = 0;
    u8 buf[BUF_SIZE] = {0}; //定义串口接收缓存区
    USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);//开启串口帧空闲中断
    void USART1_IRQHandler(void) //串口中断服务函数
    {
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    {
    buf[buf_size++] = USART_ReceiveData(USART1);
    }
    if(buf_size >= BUF_SIZE )
    {
    buf_size = 0; //接收缓冲区溢出,重新开始接收
    memset(buf,0,BUF_SIZE);
    }
    if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET) //当前为接收到一帧完整的数据包
    {
    USART1->SR; //先读SR
    USART1->DR; //再度DR 清除帧空闲中断标志位
    //此处为数据包处理逻辑
    buf_size = 0;
    memset(buf,0,BUF_SIZE);
    }

    展开全文
  • stm32支持接受单个数据或者一帧数据,若配置单个数据接收中断的话,会出现接收包丢包,数据不完整的情况!因此在stm32的串口中断中,还有一个IDLE中断,用来产生串口接受一帧数据而产生的中断,比如说串口发来n个...

    stm32支持接受单个数据或者一帧数据,若配置单个数据接收中断的话,会出现接收包丢包,数据不完整的情况!因此在stm32的串口中断中,还有一个IDLE中断,用来产生串口接受一帧数据而产生的中断,比如说串口发来n个数据,会产生n次接收中断和一次IDLE中断,因此方便使用者来接收主机发送或者从机返回的数据!

    原文链接:https://blog.csdn.net/qq_35341807/article/details/79157437

    1、配置串口中断

    void USART1_Configuration(void)
    {
    	USART_InitTypeDef USART_InitStructure;
    	GPIO_InitTypeDef GPIO_InitStructure;
    	/* Configure USART1 Rx (PA.10) as input floating */
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;		  //¸¡¿ÕÊäÈëģʽ	   
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    	
    	/* Configure USART1 Tx (PA.09) as alternate function push-pull */
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;			  //¸
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    	
    	USART_InitStructure.USART_BaudRate = 9600;						//
    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;		//
    	USART_InitStructure.USART_StopBits = USART_StopBits_1;			//
    	USART_InitStructure.USART_Parity = USART_Parity_No;				//
    	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;   //
    	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;					
    	/* Configure USART1 */
    	USART_Init(USART1, &USART_InitStructure);							
    	/* Enable USART1 Receive and Transmit interrupts */
    	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);                    //
    	USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);//
    	/* Enable the USART1 */
    	USART_Cmd(USART1, ENABLE);	                  //
    }
    

    关键

    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//没收到一个字节进入一次中断
    USART_ITConfig(USART1, USART_IT_IDLE, ENABLE); //开启串口空闲中断,每收到一帧数据进入一次中断
    

    2、串口中断函数

    处理一帧数据中所需要的内容

    一帧数据原始内容:
    在这里插入图片描述
    我要提取出这帧数据中的31.93

    char rece_buffer[BUFSIZ];
    int RxCounter;
    
    void USART1_IRQHandler(void)	
    {
    	 u8 clear=clear;
    	 USART_ClearFlag(USART1,USART_FLAG_TC);
     //接收一帧数据
    	 if(USART_GetITStatus(USART1,USART_IT_RXNE)!=Bit_RESET)        
    	   {
     
               rece_buffer[RxCounter++]=USART1->DR;
    	   }
    		 
    	 else if(USART_GetFlagStatus(USART1,USART_FLAG_IDLE)!=Bit_RESET)
    	        {					
                    clear=USART1->SR;
                    clear=USART1->DR;						
    	              RxCounter=0;
    						
    						//温度传感器的一帧数据,对需要的内容进行提取
    						if((rece_buffer[0]=='o')&&(rece_buffer[1]=='b')&&(rece_buffer[2]=='j'))
    						{
    								if(rece_buffer[9]=='-')  //¸ºÊý
    								{
    								;
    								}
    						else
                {
    								if(rece_buffer[10]=='.')   //x.xx
    								{
    								obj=(rece_buffer[9]-0x30)*100+(rece_buffer[11]-0x30)*10+(rece_buffer[2]-0x30);
    								}
    								if(rece_buffer[11]=='.')   //xx.xx
    								{
    								obj=(rece_buffer[9]-0x30)*1000+(rece_buffer[10]-0x30)*100+(rece_buffer[12]-0x30)*10+(rece_buffer[13]-0x30);
    								}
    								if(rece_buffer[12]=='.')   //xxx.xx
    								{
    								obj=(rece_buffer[9]-0x30)*10000+(rece_buffer[10]-0x30)*1000+(rece_buffer[11]-0x30)*100+(rece_buffer[13]-0x30)*10+(rece_buffer[14]-0x30)*10;
    								}
    								
    						    obj_T=obj/100;
    						}
    						printf("目标温度:%f",obj_T);
    						}
    						//printf("%s",rece_buffer);
                    }	
    					
    }
    

    最终获得需要是数据
    在这里插入图片描述

    展开全文
  • IP协议的数据帧长度是多少

    千次阅读 2019-04-11 22:07:26
    1、如果使用PPP协议,最大长度1510字节,其中数据长度(加载上层的协议数据)不超过1500字节; 2、如果在以太网中,的长度为:64~1518字节(10~100Mbps 的以太网),1G及以上的以太网,长度为512~1518字节...
  • 一帧音频的数据

    千次阅读 2019-02-09 17:52:06
    假如规定1024 个单通道样品数为一帧音频 则一秒钟有多少帧,即帧率为采样率/1024=44100/1024 一秒钟音频数据大小44100*2(双声道)*2(采样精度是AV_SAMPLE_FMT_S16,即2个byte,如果是FLTP则为4个byte,一般MP4中的AAC...
  • 教你使用stm32接收串口的一帧数据

    万次阅读 多人点赞 2018-01-25 08:47:39
    stm32支持接受单个数据或者一帧数据,若配置单个数据接收中断的话,会出现接收包丢包,数据不完整的情况!因此在stm32的串口中断中,还有一个IDLE中断,用来产生串口接受一帧数据而产生的中断,比如说串口发来n个...
  • PCM数据格式,多少字节算一帧

    千次阅读 2016-09-21 17:37:00
    转自:... Somehow i remember that normally 2048 samples refer as a frame. PCM data generally is PCM16, that means one sample is 2 bytes, so one frame...
  • Qt获取摄像头画面的每一帧数据

    千次阅读 2019-01-08 12:52:38
    继承自QAbstractVideoSurface,实现它的一些虚函数,可以在实现的虚函数 present 中获取到摄像头画面的一帧数据,拿到数据之后就可以转换处理了,这里拿到数据之后,绘制在主窗口上了。 主要代码: 首先在 .pro 中...
  • 一帧1920*1080的画面比特数 =1920*1080 bits =1920*1080/8 byte =259 200 B =1920*1080/8/1024 KB =253.125 KB 高清电视节目都是以24帧/秒的标准拍摄的,电视的刷新率却是60HZ,就是说电视画面一秒种刷新60次。 而...
  • 串口发送一帧数据时,两个字节的间隔时间是多少
  • 串口接收一帧数据及解析

    万次阅读 多人点赞 2018-05-25 11:28:16
    3. 下位机中的数据接收和协议解析 下位机接收数据也有两种方式,、等待接收,处理器一直查询串口状态,来判断是否接收到数据。二、中断接收。两种方法的优缺点在此前的篇关于串口通信的文章中详细讨论过。得出...
  • H.264裸流文件中获取每一帧数据

    千次阅读 2018-07-27 15:54:01
     之前封装了个avc的解码器,想做个测试,读取H.264裸流文件将码流定期定时推送到解码器。  测试其实很简单:  1.了解H.264裸流文件的构成  2.解析H.264裸流文件  3.提取H.264码流调用接口推送数据  1...
  • 让串口可以自动分辨一帧数据

    千次阅读 2018-01-02 10:39:49
    串口接收完整一帧数据处理方式 原文地址:让串口可以自动分辨一帧数据作者:李冬冬 有时我们希望串口接收到数据后,在该帧数据的末尾加上一些标志,比如这是第几帧或接收的时间等等。那么我们就需要知道什么...
  • 串口尾判断.vi

    2020-04-23 16:14:35
    数据帧格式为:帧头1、帧头2、数据1高、数据1低、...程序每次只读取一个数据,当判断接收数据为帧头时才开始一帧数据的接收,当判断到帧尾后,结束一帧数据的接收,并进行数据处理,处理完成后,进行下一帧数据的接收。
  • d盘有一个test.264文件,我们需要从这个h264文件中提取出一帧一帧数据,所以直接采用ffmpeg来做。 #include <iostream> #include <stdio.h> #include <string.h> #include <errno.h> #...
  • UART判断接收的数据一帧的方法

    千次阅读 2018-07-17 20:44:54
    在总线上接收到数据后,一个字节的时间内没有再接收到数据,空闲标志位置位,便认为一帧接收完毕。如STM32的空闲中断。 延时等待。设定一个超时时间,在总线上接收到数据后,设定时间内没有再接收到数据,认为一帧...
  • 这一节来获取码流每一帧的信息。在开始之前,首先来了解一下 FFmpeg 的对码流的处理过程。 FFmeg 处理流程如下: 1、得到输入流,打开输入流 2、解封装格式-&amp;amp;gt;得到编码数据包 AvPacket 3、解码...
  • 串口接收完整一帧数据包的3种方法

    万次阅读 多人点赞 2020-06-25 20:08:07
    本文介绍3种使用串口接受一帧完整数据包的方法,串口接收数据是字节接收的,串口每接收1字节数据,产生一个串口中断,我们在...帧头、帧尾表示一帧数据的开始和结尾,数据长度表示当前数据帧中负载数据大小,CRC16校...
  • stm32串口中断接收一帧数据

    万次阅读 多人点赞 2017-02-18 17:11:53
    最近用到stm32的串口,中断个字符个字符接收好心累,网上度了一下发现了篇好的帖子,和大家分享一下,原贴地址:http://www.51hei.com/bbs/dpj-39885-1.html 再次感谢原贴楼主的分享,为了方便大家,我把原文...
  • 好久就想写个东东总结下,但是一直没有时间(都是借口,就是因为懒)。...怎么去判断现在一帧协议收完了呢?也就是说,我要发送一个协议帧,根据协议他是不定长的,怎么判断现在收完了呢? 方法一: ...
  • 有时候需要在视频上画图,所以需要能获取到每一帧视频数据。 以前从视频文件或视频流中得到帧,一般都是使用qt + ffmpeg或qt + vlc。 qt对显示处理视频大体有以下方法: 1. QMediaPlayer + QVideoWidget 这种...
  • mp4视频 一帧字节大小

    千次阅读 2018-06-22 13:42:27
    我的一帧的字节大小计算方法是 视频总大小/视频长度(秒数)/视频帧速率一个1280*720 的10秒的MP4视频大小1.53M,帧速率是15帧/秒 一帧的字节大小 为10.2K = 1.53M/10/15(1M按照1000K计算)不知道我这个计算方法对不对...
  • 关于STM32串口3的使用,接收并解析一帧数据

    千次阅读 多人点赞 2020-06-03 10:21:38
    关于STM32串口3的使用,接收并解析一帧数据 当stm32的串口1被使用时,我们可以使用其他串口来使用。 步骤: 串口3定义、初始化; 串口3中断服务函数(接收的一帧数据并判断是否正确); 主函数使用; 首先,我们要将...
  • Android获取视频第一帧

    千次阅读 2018-12-06 11:37:09
    * 获取网络视频第一帧 * @param videoUrl * @return */ public static Bitmap getNetVideoBitmap(String videoUrl) { Bitmap bitmap = null; MediaMetadataRetriever retriever = new MediaMetadataRetriev.....
  • 笔记-关于Modbus一帧数据长度

    千次阅读 2019-05-30 16:01:27
    Modbus一帧数据长度为:127.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 366,022
精华内容 146,408
关键字:

一帧数据是多少