一种低延时视频传输方法及其系统、储存介质
文献发布时间:2023-06-19 10:14:56
技术领域
本发明涉及视频传输领域,更具体地,涉及一种低延时视频传输方法及其系统、储存介质。
背景技术
随着视频处理技术的发展,在视频处理领域为方便视频传输设备之间的同步传输,而需要用缓存技术,但是目前为了保证每帧图像输出的完整性采用多帧(N)缓存进行处理,读写异步钟下,当读取比写入快时,延时为一帧;当读取比写入慢时,延时为N帧。在一些延时要求比较高的场合下满足不了应用需求,而如果采用专有低延时处理芯片处理则会增加产品成本。
缓存空间作为视频传输过程的介质,输入端向缓存空间不断写入一帧帧的画面数据,输出端从缓存空间读取所述画面数据并将画面一帧帧地播放,但缓存空间可容量的数据是有限的,避免不了重复使用其中的帧存,因此在视频传输过程中需要使用读指针和写指针分别引导读操作和写操作在有限的缓存空间的协调进行。
发明内容
本发明旨在克服上述现有技术的至少一种缺陷(不足),提供一种低延时视频传输方法及其系统、储存介质。
本发明的方法:判断输出帧率和输入帧率是否一致,若输出帧率和输入帧率一致,则采用一帧或一帧以上的缓存空间进行读写操作;若输出帧率和输入帧率不一致,采用两帧的缓存空间进行第一类读写操作;所述第一类读写操作具体为:读指针和写指针在两个帧存上交替移动,移动过程中判断是否会出现访问冲突,根据判断结果分配读指针进行读操作的帧存和写指针进行写操作的帧存。在输入帧率和输出帧率不一致时,使用两帧的缓存空间进行读写,读取的帧是正在写入的帧或者正在写入的帧的上一帧,最大延时不超过一帧。为了保证一帧画面的完整性,避免出现因读写效率不平衡导致的在一帧内超前读取或覆盖写入,控制引导写操作(写入)的写指针和引导读操作(读取)的读指针指向两帧缓存空间的同一帧存或不同帧存,从而引导写操作和读操作有序进行。
进一步地,所述移动过程中判断访问是否冲突,根据判断结果分配读指针进行读操作的帧存和写指针进行写操作的帧存的步骤具体为:读/写指针在跳转不同帧存时,若即将跳转的帧存上没有写/读指针,读/写指针进行正常跳转,在跳转的帧存上进行读/写操作;若即将跳转的帧存上有写/读指针,进行第二判断操作;所述第二判断操作具体为:预先设置安全相对位置值;计算读指针和写指针的相对位置值,若读指针和写指针的相对位置值大于或等于所述安全相对位置值,读/写指针进行正常跳转,在跳转的帧存上进行读/写操作;若读指针和写指针的相对位置值小于所述安全相对位置值,读/写指针不进行跳转,在原帧存上进行读/写操作。访问冲突指读取一帧画面时中途被写操作改写了一部分数据或写入一帧画面时读操作读取了未更新的数据,读速率和写速率在传输过程中不断地进行实时变化,在读指针或者写指针每次跳转都进行判断操作,使二者始终保持大于或等于安全相对位置值的距离,避免出现访问冲突造成的图像分裂现象。
进一步地,所述安全相对位置值根据读、写操作的速率差值进行计算确定。在读速率和写速率相近时,安全相对位置值与延时正相关,安全相对位置值越小,延时越小,可通过改变安全相对位置值控制延时,适应不同的传输情景,具有灵活性。
在输出帧率和输入帧率一致时,则采用一帧或一帧以上的缓存空间进行第二类读写操作;所述第二类读写操作具体为:进行写操作;当完成若干量数据的写入后,开始读操作;实时对比读操作的速率和写操作的速率,若前者比后者大,降低读指针的时钟频率;若前者比后者小,提高读指针的时钟频率;完成一个帧存的读操作后读指针跳转至写指针当前所在的帧存。在输出帧率和输入帧率一致时,第二类读写操作中写操作正常进行,不需进行判断操作或更改写指针的时钟频率,读写指针在传输过程中大部分处于同一帧存内,读操作尾随写操作,延时保持在一帧以内,其与所述若干量数据的大小正相关。
进一步地,所述若干量数据根据读操作速率和写操作速率的差值进行计算确定。
或者,在输出帧率和输入帧率一致时也可采用一帧的缓存空间进行第三类读写操作;所述第三类读写操作具体为:在一个帧存上的初始行开始写操作,写入L行的数据后开始读操作;其中,L为整数,并且是预设值;每完成一帧数据的写操作,计算当前写入一行数据需要的时间和完成读取一行数据需要的时间,并对二者进行比较,若前者比后者大,在初始行开始进行新一帧数据的写操作;若前者比后者小,在原行进行重复写入的写操作,完成重复写入原行数据后,在初始行开始新一帧数据的写操作;每完成一帧数据的读操作,计算当前写入一行数据需要的时间和完成读取一行数据需要的时间,并对二者进行比较,若前者比后者大,在原行进行读操作,对原行的数据进行重新读取,完成原行的数据重新读取后,在初始行进行新一帧数据的读操作;若前者比后者小,在初始行进行新一帧数据的读操作。此方案应用在需要超低延时的视频传输情景中,每完成一帧数据的写入,以完成一行数据量的写操作时间和完成一行数据量的读操作时间作为判断依据,判断在所述一个帧存的初始行开始新一帧的写入是否会覆盖仍未读取的数据,即是否会出现访问冲突的现象,是则在原行上开始新一帧的写入,完成原行的写入后写指针再跳转至初始行,在初始行以及帧存上的其他行进行写操作;读操作同理,判断在所述一个帧存的初始行进行读取是否会读取到写操作未写入的新一帧数据,即是否会出现另一种访问冲突的现象,是则先重复读取原行的数据,待不会出现访问冲突的现象,读指针再跳转至初始行,再读取已经写入的新一帧的数据。上述过程可使读写指针保持小于一帧的若干行数据量的超低延时,读写指针可在同一帧存内相对位置较近亦不会出现访问冲突的情况。
进一步地,所述L根据读操作速率和写操作速率的差值进行计算确定。
本发明的系统包括:判断模块,用于进行判断输出帧率和输入帧率是否一致及是否会出现访问冲突;控制模块,用于控制读操作和写操作的进行;缓存模块,用于进行读操作和写操作;若判断模块判断输出帧率和输入帧率一致,控制模块控制在缓存模块上进行读写操作,缓存模块启用一帧或一帧以上的缓存空间;若判断模块判断输出帧率和输入帧率不一致,控制模块控制在缓存模块上进行第一类读写操作,缓存模块启用两帧的缓存空间;所述第一类读写操作具体为:所述控制模块控制读指针和写指针在缓存模块的两个帧存上交替移动,读指针和写指针的移动过程中判断模块判断是否会出现访问冲突,控制模块根据判断结果分配读指针进行读操作的帧存和写指针进行写操作的帧存。
进一步地,判断模块通过读指针和写指针的相对位置进行判断是否会出现访问冲突,具体如下:若读/写指针即将跳转的帧存上没有写/读指针,判断模块的判断结果为不冲突;若读/写指针即将跳转的帧存上有写/读指针,判断模块进行第二判断操作:计算读指针和写指针的相对位置值,并比较所述相对位置值与预设的安全相对位置值作比较,若前者大于后者,判断模块的判断结果为不冲突;若前者小于后者,判断模块的判断结果为冲突;若判断结果为不冲突,控制模块控制读/写指针正常跳转,在跳转的帧存上进行读/写操作;若判断结果为冲突,控制模块控制读/写指针不进行跳转,在原帧存上重新进行读/写操作。
与现有技术相比,本发明的有益效果为:根据输入和输出的情况,自适应视频处理方式,达到最大不超过一帧的低延时,并且保证每帧画面的完整性,提高视频传输效率的同时保证传输质量。
附图说明
图1为本发明的第一类读写操作步骤图。
图2为本发明的第一类和第二类读写操作步骤图。
图3为本发明的第一类和第三类读写操作之写操作步骤图。
图4为本发明的第一类和第三类读写操作之读操作步骤图。
图5为本发明的系统结构图。
附图标记:判断模块1;控制模块2;缓存模块3;
具体实施方式
本发明附图仅用于示例性说明,不能理解为对本发明的限制。为了更好说明以下实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
实施例1
本实施例提供一种低延时视频传输方法,包括步骤:判断输出帧率和输入帧率是否一致,若输出帧率和输入帧率一致,则采用一帧或一帧以上的缓存空间进行读写操作;若输出帧率和输入帧率不一致,采用两帧的缓存空间进行第一类读写操作;所述第一类读写操作具体为:读指针和写指针在两个帧存上交替移动,移动过程中判断是否会出现访问冲突,根据判断结果分配读指针进行读操作的帧存和写指针进行写操作的帧存。
进一步地,所述移动过程中判断访问是否冲突,根据判断结果分配读指针进行读操作的帧存和写指针进行写操作的帧存的步骤具体为:读/写指针在跳转不同帧存时,若即将跳转的帧存上没有写/读指针,读/写指针进行正常跳转,在跳转的帧存上进行读/写操作;若即将跳转的帧存上有写/读指针,进行第二判断操作;所述第二判断操作具体为:
预先设置安全相对位置值;计算读指针和写指针的相对位置值,若读指针和写指针的相对位置值大于或等于所述安全相对位置值,读/写指针进行正常跳转,在跳转的帧存上进行读/写操作;若读指针和写指针的相对位置值小于所述安全相对位置值,读/写指针不进行跳转,在原帧存上进行读/写操作。进一步地,所述安全相对位置值根据读、写操作的速率差值进行计算确定。在读写速率波动较大的情况下,可适当增大安全相对位置值,有效避免图像分裂。
如图1所示,本实施例最优的实施方式如下:
S1:判断输出帧率和输入帧率是否一致;若输出帧率和输入帧率一致,进行S2;若输出帧率和输入帧率不一致,进行S3;
S2:采用一帧或一帧以上的缓存空间进行读写操作,所述读写操作不作限制,可为本领域技术人员熟知的普通读写过程;
S3:采用两帧的缓存空间进行第一类读写操作,具体为:
S31:读指针和写指针分居在两个帧存上,读操作和写操作在不同的帧存上进行;
S32:每完成了一帧的读/写操作后,对读/写指针即将跳转的帧存上是否存在写/读指针进行判断;若即将跳转的帧存上没有写/读指针,进行S32a;若即将跳转的帧存上有写/读指针,进行S32b;
S32a:读/写指针进行正常跳转;
S32b:进行第二判断操作:具体为:
S321:设置安全相对位置值;在其他实施例中,所述安全相对位置值可预先进行设置,从而跳过S321;
S322:计算读指针和写指针的相对位置值,并对比所述相对位置值和所述安全相对位置值,若相对位置值大于或等于安全相对位置值,进行S322a;若相对位置值小于安全相对位置值,进行S322b;
S322a:读/写指针进行正常跳转;
S322b:读/写指针不进行跳转。
实际传输情景中,读写速率往往在不断波动且互不相等,收到多方面因素的干扰,为了保证一帧画面的完整性,避免出现因读写效率不平衡导致的在一帧内超前读取或覆盖写入,控制引导写操作(写入)的写指针和引导读操作(读取)的读指针指向两帧缓存空间的同一帧存或不同帧存,从而引导写操作和读操作有序进行。所述超前读取具体为:显示一帧画面时,读取的速率较写入的速率快,读指针超越了写指针,指向了写指针未更新的缓存空间,读取了一部分旧帧的数据,导致显示的画面混杂了不同帧的图像或渲染效果,造成图像分裂。同理,所述覆盖写入具体为:写入的速率较读取的速率快,写指针完成了一帧的写入,跳转至读指针所在的帧存上开始新一帧的写入,当它在一帧内超越了读指针在读指针未读取到缓存空间写入了新一帧数据,覆盖了读指针本应读取但仍未读取的数据,读指针后续读取的数据不属于原帧,亦会出现同一帧画面出现图像分裂。
读指针和写指针的相对位置值可以用二者在缓存空间上指向的行的差值,也可以用已读取数据量和已写入数据量的差值,反映读操作和写操作进度差异的参考量均可作为相对位置值。安全相对位置值预先进行设置,可以根据传输要求和平均读写速率进行确定,具有灵活性。当读指针不进行跳转时,相当于重新读取了刚读取的一帧画面;写指针不进行跳转时,相当于将未读取的一帧画面覆盖掉,写入最新一帧画面。可以看出,上述指针不进行跳转的情况会造成丢失帧的现象,现有技术亦存在此问题,但一般传输情景中,读写速率不会相差2倍以上,本实施例的方法可使读写指针稳定保持在安全相对位置值的距离,丢失的帧数不影响输出端的视频播放效果,对画面连续性的影响较小。
实施例2
本实施例相比于实施例1的区别在于,进一步改良了输出帧率和输入帧率一致时的传输方法,使用第二类读写操作,包括步骤:进行写操作;当完成若干量数据的写入后,开始读操作其中,所述若干量数据可以以行作单位或以字节作单位,本实施例将若干量数据设为K行,K可以不为整数;实时对比读操作的速率和写操作的速率,若前者比后者大,降低读指针的时钟频率;若前者比后者小,提高读指针的时钟频率;完成一个帧存的读操作后读指针跳转至写指针当前所在的帧存。在输出帧率和输入帧率一致时,读指针保持在写指针之后,读写指针在传输过程中大部分处于同一帧存内,读操作尾随写操作,保持在以行为单位的延时,其与所述K的数值正相关,可通过调节K值适应不同延时要求的传输环境。
如图2所示,本实施例所述的一种低延时视频传输方法最优实施方式如下:
A1:判断输出帧率和输入帧率是否一致;若输出帧率和输入帧率一致,进行A2;若输出帧率和输入帧率一致,进行A3;
A2:采用两帧或两帧以上的缓存空间进行第二类读写操作,具体为:
A21:在一个帧存上开始写操作,写入K行后开始读操作;
A22:实时对比读操作的速率和写操作的速率;若读操作的速率比写操作的速率大,进行A22a;若读操作的速率比写操作的速率小,进行A32b;若读操作的速率等于写操作的速率,进行A22a或A32b均可,不作限制;
A22a:降低读指针的时钟频率;完成一个帧存的写操作后写指针跳转至下一个帧存;完成一个帧存的读操作后读指针跳转至写指针当前所在的帧存;
A22b:提高读指针的时钟频率;完成一个帧存的写操作后写指针跳转至下一个帧存;完成一个帧存的读操作后读指针跳转至写指针当前所在的帧存;
A3:采用两帧的缓存空间进行第一类读写操作,具体为:
A31:读指针和写指针分居在两个帧存上,读操作和写操作在不同的帧存上进行;
A32:每完成了一帧的读/写操作后,对读/写指针即将跳转的帧存上是否存在写/读指针进行判断;若即将跳转的帧存上没有写/读指针,进行A32a;若即将跳转的帧存上有写/读指针,进行A32b;
A32a:读/写指针进行正常跳转;
A32b:进行第二判断操作:具体为:
A321:设置安全相对位置值;在其他实施例中,所述安全相对位置值可预先进行设置,从而跳过A321;
A322:计算读指针和写指针的相对位置值,并对比所述相对位置值和所述安全相对位置值,若相对位置值大于或等于安全相对位置值,进行A322a;若相对位置值小于安全相对位置值,进行A322b;
A322a:读/写指针进行正常跳转;
A322b:读/写指针不进行跳转。
无论输出帧率和输入帧率是否一致,上述的处理过程都控制延时等于或小于一帧,同时保证每一帧画面的完整性。需要说明的是,本实施例在输出帧率和输入帧率一致的情况下使用了两帧或两帧以上的缓存空间进行读写操作,在其他实施例的相同情况中亦可使用一帧的缓存空间,重复在一个帧存上写入多帧数据,写指针循环跳转;读指针尾随写指针,完成一帧数据的读取后,读指针跳转,指向仅有的一个帧存上已经写入新一帧数据的行,读取新一帧的数据。
实施例3
本实施例与实施例2的区别在于,当输出帧率和输入帧率一致时,采用一帧的缓存空间进行第三类读写操作。所述第三类读写操作具体为:
在一个帧存上的初始行开始写操作,写入L行的数据后开始读操作;其中,L为整数,并且是预设值;每完成一帧数据的写操作,计算当前写入一行数据需要的时间和完成读取一行数据需要的时间,并对二者进行比较,若前者比后者大,在初始行开始进行新一帧数据的写操作;若前者比后者小,在原行进行重复写入的写操作;每完成一帧数据的读操作,计算当前写入一行数据需要的时间和完成读取一行数据需要的时间,并对二者进行比较,若前者比后者大,在原行进行读操作,对原行的数据进行重新读取,完成原行的数据重新读取后,在初始行进行新一帧数据的读操作;若前者比后者小,在初始行进行新一帧数据的读操作。所述L根据读操作速率和写操作速率的差值进行计算确定。
在第三类读写操作中,读指针和写指针的跳转方式有差异,同时发生在整个传输过程中,故对写操作和读操作进行分别论述。如图3所示,写操作的最优实施方式为:
B1:在缓存空间的一帧存上写入L行数据;其中,未完成L行数据的写入前,写指针跳转前无需进行判断,正常跳转;其中L为整数,并且是预设值;
B2:完成L行数据的写入后,写操作每完成一帧数据的写入,在写指针即将跳转至下一行时,计算当前写入一行数据需要的时间和完成读取一行数据需要的时间,并对二者进行比较,若前者比后者大,进行B2a;若前者比后者小,进行B2b;
B2a:写指针正常跳转,在初始行开始新一帧数据的写操作;
B2b:写指针不进行跳转,在原行进行原帧数据的重复写入,完成后写指针跳转至初始行,在初始行开始新一帧数据的写入。
其中,当前写入一行数据需要的时间和完成读取一行数据需要的时间时,可任意进行B2a或B2b。
如图4所示,读操作的最优实施方式为:
C1:待写操作完成L行数据的写入后,开始读操作,读指针指向写指针所在的帧存,对已经写入的数据进行读取;
C2:读操作每完成一帧数据的读取,在读指针进行即将跳转时,计算当前写入一行数据需要的时间和完成读取一行数据需要的时间,并对二者进行比较,若前者比后者大,进行C2a;若前者比后者小,进行C2b;
C2a:读指针不进行跳转,在原行进行重新读取,完成后读指针跳转至初始行,在初始行开始新一帧数据的读操作;
C2b:读指针正常跳转,在初始行进行新一帧数据的读操作。
其中,当前写入一行数据需要的时间和完成读取一行数据需要的时间时,可任意进行C2a或C2b。
本实施例相较于实施例2可达到更低的延时,而不出现访问冲突造成的图像分裂现象,适用于注重延时但对画面质量要求不高的情景。上述读操作和写操作的最优实施方式均发生在已经判断为输入帧率与输出帧率一致之后,无列出具体判断输入帧率与输出帧率是否一致的过程,本领域技术人员可参考实施例2得知完整的过程。
实施例4
本实施例与实施例3的区别在于,当输出帧率和输入帧率一致时,采用一帧的缓存空间进行读写,结合第二类读写操作和第三类读写操作进行视频传输,具体如下:
预设读写时间差阀值,所述读写时间差阀值用于判断使用第二类读写操作还是第三类读写操作;在输出帧率和输入帧率一致的情况下,开始读写操作前以及开始新一帧的读写之前,计算当前写入一行所需的时间和读出一行所需的时间的差值,对比所述差值和读写时间差阀值,若前者大于后者,采用第二类操作;若前者小于后者,采用第三类读写操作。具体步骤本领域技术人员可参考实施例2和实施例3得知。
本实施例相较其他实施例,平衡了传输延时和画面质量,延时比实施例2更低,画面质量比实施例3更好。
实施例5
如图5所示,本实施例提供一种实现所述低延时视频传输方法的系统,包括:判断模块1,用于进行判断输出帧率和输入帧率是否一致及是否会出现访问冲突;控制模块2,用于控制读操作和写操作的进行;缓存模块3,用于进行读操作和写操作,输出端和输入端通过所述缓存空间进行数据传输;若判断模块1判断输出帧率和输入帧率一致,控制模块2控制在缓存模块3上进行读写操作,缓存模块3启用一帧或一帧以上的缓存空间;若判断模块1判断输出帧率和输入帧率不一致,控制模块2控制在缓存模块3上进行第一类读写操作,缓存模块3启用两帧的缓存空间;所述第一类读写操作具体为:所述控制模块2控制读指针和写指针在缓存模块3的两个帧存上交替移动,读指针和写指针的移动过程中判断模块1判断是否会出现访问冲突,控制模块2根据判断结果分配读指针进行读操作的帧存和写指针进行写操作的帧存。
进一步地,判断模块1通过读指针和写指针的相对位置进行判断是否会出现访问冲突,具体如下:若读/写指针即将跳转的帧存上没有写/读指针,判断模块1的判断结果为不冲突;若读/写指针即将跳转的帧存上有写/读指针,判断模块1进行第二判断操作:计算读指针和写指针的相对位置值,并比较所述相对位置值与预设的安全相对位置值作比较,若前者大于后者,判断模块1的判断结果为不冲突;若前者小于后者,判断模块1的判断结果为冲突;若判断结果为不冲突,控制模块2控制读/写指针正常跳转,在跳转的帧存上进行读/写操作;若判断结果为冲突,控制模块2控制读/写指针不进行跳转,在原帧存上重新进行读/写操作。
本实施例的低延时视频传输系统还可实现所述第二类读写操作和第三类读写操作。判断模块1若判断输出帧率和输入帧率一致,控制模块2则执行所述第二类读写操作或第三类读写操作。其中,执行第二类读写操作的过程具体为:缓存模块3采用一帧或一帧以上的缓存空间进行读操作和写操作,控制模块2控制在缓存模块3的一个帧存上开始写操作,写入若干量数据后开始读操作;判断模块1实时对比读操作的速率和写操作的速率,若前者比后者大,控制模块2降低读指针的时钟频率;若前者比后者小,控制模块2提高读指针的时钟频率。完成一个帧存的写操作后,控制模块2控制写指针跳转至缓存模块3的下一个帧存;完成一个帧存的读操作后,控制模块2控制读指针跳转至写指针当前所在的帧存。在其他实施例中,缓存模块3还可采用一帧的缓存空间进行第二类读写操作。
执行第三类读写操作的过程具体为:缓存模块3采用一帧的缓存空间进行读操作和写操作,控制模块2控制在一个帧存上开始写操作,写入L行的数据后开始读操作;其中,L为整数,并且是预设值;每完成一帧数据的写操作,在写指针即将跳转至下一行时,判断模块1计算当前写入一行数据需要的时间和完成读取一行数据需要的时间,并对二者进行比较,若前者比后者大,控制模块2控制写指针正常跳转,在所述一个帧存的初始行开始写操作;若前者比后者小,控制模块2控制写指针不进行跳转,在原行重复写入原帧数据,完成后在初始行开始新一帧数据的写操作;每完成一帧数据的读操作,在读指针即将跳转至下一行时,判断模块1计算当前写入一行数据需要的时间和完成读取一行数据需要的时间,并对二者进行比较,若前者比后者大,控制模块2控制读指针不进行跳转,在原行进行重复读取,完成一次原行的重复读取后控制模块2控制读指针跳转至初始行,在初始行开始读操作;若前者比后者小,控制模块2控制读指针正常跳转,在初始行开始读操作。
实施例6
本实施例提供一种计算机储存介质,存储实现所述低延时视频传输方法的软件,使在视频传输中的输出帧率和输入帧率不一致时,保持不大于一帧的低延时,最小可达以行为单位的超低延时,并且保证每帧画面的完整性。
所述低延时视频传输方法为:判断输出帧率和输入帧率是否一致,若输出帧率和输入帧率一致,则采用一帧或一帧以上的缓存空间进行读写操作;若输出帧率和输入帧率不一致,采用两帧的缓存空间进行第一类读写操作;所述第一类读写操作具体为:读指针和写指针在两个帧存上交替移动,移动过程中判断是否会出现访问冲突,根据判断结果分配读指针进行读操作的帧存和写指针进行写操作的帧存。
显然,本发明的上述实施例仅仅是为清楚地说明本发明技术方案所作的举例,而并非是对本发明的具体实施方式的限定。凡在本发明权利要求书的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。
- 一种低延时视频传输方法及其系统、储存介质
- 一种低延时音视频传输方法、装置及计算机可读存储介质