发明内容
本发明的目的是为了克服上述背景技术的不足,提供一种用户切换清晰度加载视频流的方法及系统,能够根据视频流的清晰度,实现灵活切换线路来加载视频流,提高用户的观看体验。
本发明提供一种用户切换清晰度加载视频流的方法,包括以下步骤:
A、构建线路切换的界面,当用户点击某一个按钮的时候,该按钮将自身对应的清晰度状态和属于哪一个线路的信息,传递给按钮加载视频流函数;
B、如果按钮所携带的当前清晰度和当前播放的视频流的清晰度一致,且按钮所属的线路与当前播放视频流的线路一致,中断执行按钮加载视频流函数,线路切换的界面消失,不加载视频流;
C、存储当前用户选择的线路和清晰度,下一次用户来到直播间时,对于已经存储有线路和清晰度的用户,优先给该用户拉取已存储线路和对应清晰度的视频流,保存按钮当前选择的线路和清晰度;设置动画,使线路切换的界面消失,重新加载直播间或者视频的信息;
D、定期检查视频流是否正确有效,根据用户选择的清晰度拉取视频流来播放。
在上述技术方案的基础上,步骤A中,所述构建线路切换的界面的过程如下:
A1、搭建线路切换的界面;
A2、在搭建的线路切换的界面上,添加切换线路的按钮,每个线路下面有“高清、普清、超清”三个按钮中的1~3个;
A3、每个按钮上面有线路的清晰度、按钮属于哪个线路的信息,每个按钮的清晰度状态为“高清、普清、超清”中的一种。
在上述技术方案的基础上,步骤B中还包括以下步骤:如果没有中断执行按钮加载视频流函数,则将按钮对应的视频流的清晰度显示在直播或者视频播放的播放器中,让用户知道自己选中的是哪一种清晰度。
在上述技术方案的基础上,步骤D中,所述根据用户选择的清晰度拉取视频流来播放的过程如下:
D1、判断视频流所在的父类的图层是否存在,如果存在,获得每一段视频流的模型对象,该模型对象包含视频流播放地址的链接和失效时间,将视频流的失效时间和当前的时间进行比较,如果两者的时间差小于预设的时间间隔,则请求新的视频流的地址;
D2、调用视频流请求接口,获取视频流播放地址;根据用户选择的清晰度,生成和用户选择的清晰度相关的拉流地址;获得拉流地址后,使用播放器拉起最新的视频流;
D3、调用视频流请求接口,如果不能获得最新的视频流播放地址,则销毁视频播放器,释放播放器内存,告知用户视频流错误,在播放器上给用户提供一个重置按钮,刷新直播间的数据,重新开始播放;在整个视频的播放过程中,定期重复执行D1~D3,保证获取的拉流地址的正确性,保证视频正确播放。
在上述技术方案的基础上,步骤D2中,所述拉流地址的生成过程是:使用视频流播放地址,拼接上清晰度的字符串,高清是@“high”,普清是@“normal”,超清是@“super”,生成和用户选择的清晰度相关的拉流地址。
本发明该提供一种用户切换清晰度加载视频流的系统,该系统包括线路切换界面构建单元、加载单元、存储单元、动画设置单元、拉流播放单元,其中:
线路切换界面构建单元用于:构建线路切换的界面;
加载单元用于:当用户点击某一个按钮的时候,该按钮将自身对应的清晰度状态和属于哪一个线路的信息,传递给按钮加载视频流函数;如果按钮所携带的当前清晰度和当前播放的视频流的清晰度一致,且按钮所属的线路与当前播放视频流的线路一致,中断执行按钮加载视频流函数,线路切换的界面消失,不加载视频流;
存储单元用于:存储当前用户选择的线路和清晰度,下一次用户来到直播间时,对于已经存储有线路和清晰度的用户,优先给该用户拉取已存储线路和对应清晰度的视频流,保存按钮当前选择的线路和清晰度;
动画设置单元用于:设置动画,使线路切换的界面消失,重新加载直播间或者视频的信息;
拉流播放单元用于:定期检查视频流是否正确有效,根据用户选择的清晰度拉取视频流来播放。
在上述技术方案的基础上,所述线路切换界面构建单元构建线路切换的界面的过程如下:
搭建线路切换的界面;
在搭建的线路切换的界面上,添加切换线路的按钮,每个线路下面有“高清、普清、超清”三个按钮中的1~3个;
每个按钮上面有线路的清晰度、按钮属于哪个线路的信息,每个按钮的清晰度状态为“高清、普清、超清”中的一种。
在上述技术方案的基础上,该系统还包括显示单元,所述显示单元用于:如果所述加载单元没有中断执行按钮加载视频流函数,显示单元将按钮对应的视频流的清晰度显示在直播或者视频播放的播放器中,让用户知道自己选中的是哪一种清晰度。
在上述技术方案的基础上,所述拉流播放单元根据用户选择的清晰度拉取视频流来播放的过程如下:
判断视频流所在的父类的图层是否存在,如果存在,获得每一段视频流的模型对象,该模型对象包含视频流播放地址的链接和失效时间,将视频流的失效时间和当前的时间进行比较,如果两者的时间差小于预设的时间间隔,则请求新的视频流的地址;
调用视频流请求接口,获取视频流播放地址;根据用户选择的清晰度,生成和用户选择的清晰度相关的拉流地址;获得拉流地址后,使用播放器拉起最新的视频流;
调用视频流请求接口,如果不能获得最新的视频流播放地址,则销毁视频播放器,释放播放器内存,告知用户视频流错误,在播放器上给用户提供一个重置按钮,刷新直播间的数据,重新开始播放;在整个视频的播放过程中,定期重复执行以上步骤,保证获取的拉流地址的正确性,保证视频正确播放。
在上述技术方案的基础上,所述拉流地址的生成过程是:使用视频流播放地址,拼接上清晰度的字符串,高清是@“high”,普清是@“normal”,超清是@“super”,生成和用户选择的清晰度相关的拉流地址。
与现有技术相比,本发明的优点如下:
(1)本发明搭建线路切换的界面,在直播或点播中,用户点击线路切换的中的某一个线路和清晰度的按钮后,系统根据这个按钮所携带的清晰度信息去拉取对应的视频流。本发明能够根据视频流的清晰度,实现灵活切换线路来加载视频流,提高用户的观看体验。
在直播或点播中,如果用户的网速比较慢,观看高清视频或者超清视频可能会比较卡,用户需要切换清晰度,如果切换到普清,可能可以消除播放的时候的卡顿现象;如果用户网速比较快,可以切换到高清或者超清,观看更清晰的视频,提高观看体验。
(2)本发明构建线路切换的界面,当用户点击某一个按钮的时候,该按钮将自身对应的清晰度状态和属于哪一个线路的信息,传递给按钮加载视频流函数。本发明创建了一个线路切换的界面,这个界面的布局是有多个线路供用户选择,每个线路下面有“超清、高清、普清”中的一种,方便用户切换到合适的线路,这样可以避免一个线路无法播放的时候,用户还有其他的线路可以选择。
(3)如果按钮所携带的当前清晰度和当前播放的视频流的清晰度一致,且按钮所属的线路与当前播放视频流的线路一致,中断执行按钮加载视频流函数,线路切换的界面消失,不加载视频流。如果用户选择的清晰度和线路和当前播放的视频流的清晰度和线路一致,不做任何操作,减少了不必要的拉流,能够提升用户的观看体验。
(4)本发明存储当前用户选择的线路和清晰度,下一次用户来到直播间时,对于已经存储有线路和清晰度的用户,优先给该用户拉取已存储线路和对应清晰度的视频流,保存按钮当前选择的线路和清晰度;设置动画,使线路切换的界面消失,重新加载直播间或者视频的信息。用户选择按钮之后,这个按钮携带了这个按钮的清晰度状态和所在线路,将按钮的清晰度状态和所在线路,都传递给按钮加载视频流函数,按钮加载视频流函数就可以保留这些按钮的清晰度的状态和属于哪个线路的状态,方便下一次用户启动App的时候,去拉取上一次选择的线路房间信息和上一次选择的清晰度状态的视频流。
(5)本发明判断视频流所在的父类的图层是否存在,如果存在,获得每一段视频流的模型对象,该模型对象包含视频流播放地址的链接和失效时间,将视频流的失效时间和当前的时间进行比较,如果两者的时间差小于预设的时间间隔,则请求新的视频流的地址。本发明实现了视频流播放地址分割,分割为120秒的视频流,每5秒检查一下视频流的有效性,120秒的视频共用一个视频流资地址的方法,保证获取的单个视频流较小,保证播放的时候拉取的视频流不是很大,避免用户看一秒拉取过多的视频流,5秒检查一次地址的有效性,快过期前去拉取最新的留地址,保证了视频播放的有效性。
(6)本发明调用视频流请求接口,获取视频流播放地址;根据用户选择的清晰度,生成和用户选择的清晰度相关的拉流地址;获得拉流地址后,使用播放器拉起最新的视频流。本发明根据用户选择的清晰度,拼接一个视频流播放地址,利用这个视频流播放地址去加载对应清晰度的视频流,实现了简单、快捷地根据用户清晰度去拉取对应的视频流。
(7)本发明调用视频流请求接口,如果不能获得最新的视频流播放地址,则销毁视频播放器,释放播放器内存,告知用户视频流错误,在播放器上给用户提供一个重置按钮,刷新直播间的数据,重新开始播放;如果视频流错误,及时释放播放器,在直播功能中,占用内存最大的是视频播放器,如果加载视频流错误,去释放播放器,保证有效的降低直播间控制器的内存占用。
(8)本发明在整个视频的播放过程中,定期重复执行,保证获取的拉流地址的正确性,保证视频正确播放。整个视频的播放步骤是一个循环的过程,能够实现有效、方便地播放视频。
具体实施方式
下面结合附图及具体实施例对本发明作进一步的详细描述。
参见图1所示,本发明实施例提供一种用户切换清晰度加载视频流的方法,包括以下步骤:
A、构建线路切换的界面,当用户点击某一个按钮的时候,该按钮将自身对应的清晰度状态和属于哪一个线路的信息,传递给按钮加载视频流函数;
B、如果按钮所携带的当前清晰度和当前播放的视频流的清晰度一致,且按钮所属的线路与当前播放视频流的线路一致,中断执行按钮加载视频流函数,线路切换的界面消失,不加载视频流;如果没有中断执行按钮加载视频流函数,则将按钮对应的视频流的清晰度显示在直播或者视频播放的播放器中,让用户知道自己选中的是哪一种清晰度;
C、存储当前用户选择的线路和清晰度,下一次用户来到直播间时,对于已经存储有线路和清晰度的用户,优先给该用户拉取已存储线路和对应清晰度的视频流,保存按钮当前选择的线路和清晰度;设置动画,使线路切换的界面消失,重新加载直播间或者视频的信息;
D、定期检查视频流是否正确有效,根据用户选择的清晰度拉取视频流来播放。
参见图2所示,步骤A中,构建线路切换的界面的过程如下:
A1、搭建线路切换的界面;
A2、在搭建的线路切换的界面上,添加切换线路的按钮,每个线路下面有“高清、普清、超清”三个按钮中的1~3个;
A3、每个按钮上面有线路的清晰度、按钮属于哪个线路的信息,每个按钮的清晰度状态为“高清、普清、超清”中的一种。
参见图3所示,步骤D中,根据用户选择的清晰度拉取视频流来播放的过程如下:
D1、判断视频流所在的父类的图层是否存在,如果存在,获得每一段视频流的模型对象,该模型对象包含视频流播放地址的链接和失效时间,将视频流的失效时间和当前的时间进行比较,如果两者的时间差小于预设的时间间隔,则请求新的视频流的地址;
D2、调用视频流请求接口,获取视频流播放地址;根据用户选择的清晰度,生成和用户选择的清晰度相关的拉流地址;获得拉流地址后,使用播放器拉起最新的视频流;
D3、调用视频流请求接口,如果不能获得最新的视频流播放地址,则销毁视频播放器,释放播放器内存,告知用户视频流错误,在播放器上给用户提供一个重置按钮,刷新直播间的数据,重新开始播放;在整个视频的播放过程中,定期重复执行D1~D3,保证获取的拉流地址的正确性,保证视频正确播放。
步骤D2中,所述拉流地址的生成过程是:使用视频流播放地址,拼接上清晰度的字符串,高清是@“high”,普清是@“normal”,超清是@“super”,生成和用户选择的清晰度相关的拉流地址。
本发明还提供一种用户切换清晰度加载视频流的系统,该系统包括线路切换界面构建单元、加载单元、存储单元、动画设置单元、拉流播放单元,其中:
线路切换界面构建单元用于:构建线路切换的界面;
加载单元用于:当用户点击某一个按钮的时候,该按钮将自身对应的清晰度状态和属于哪一个线路的信息,传递给按钮加载视频流函数;如果按钮所携带的当前清晰度和当前播放的视频流的清晰度一致,且按钮所属的线路与当前播放视频流的线路一致,中断执行按钮加载视频流函数,线路切换的界面消失,不加载视频流;
存储单元用于:存储当前用户选择的线路和清晰度,下一次用户来到直播间时,对于已经存储有线路和清晰度的用户,优先给该用户拉取已存储线路和对应清晰度的视频流,保存按钮当前选择的线路和清晰度;
动画设置单元用于:设置动画,使线路切换的界面消失,重新加载直播间或者视频的信息;
拉流播放单元用于:定期检查视频流是否正确有效,根据用户选择的清晰度拉取视频流来播放。
线路切换界面构建单元构建线路切换的界面的过程如下:
搭建线路切换的界面;
在搭建的线路切换的界面上,添加切换线路的按钮,每个线路下面有“高清、普清、超清”三个按钮中的1~3个;
每个按钮上面有线路的清晰度、按钮属于哪个线路的信息,每个按钮的清晰度状态为“高清、普清、超清”中的一种。
该系统还包括显示单元,显示单元用于:如果所述加载单元没有中断执行按钮加载视频流函数,显示单元将按钮对应的视频流的清晰度显示在直播或者视频播放的播放器中,让用户知道自己选中的是哪一种清晰度。
拉流播放单元根据用户选择的清晰度拉取视频流来播放的过程如下:
判断视频流所在的父类的图层是否存在,如果存在,获得每一段视频流的模型对象,该模型对象包含视频流播放地址的链接和失效时间,将视频流的失效时间和当前的时间进行比较,如果两者的时间差小于预设的时间间隔,则请求新的视频流的地址;
调用视频流请求接口,获取视频流播放地址;根据用户选择的清晰度,生成和用户选择的清晰度相关的拉流地址;获得拉流地址后,使用播放器拉起最新的视频流;拉流地址的生成过程是:使用视频流播放地址,拼接上清晰度的字符串,高清是@“high”,普清是@“normal”,超清是@“super”,生成和用户选择的清晰度相关的拉流地址;
调用视频流请求接口,如果不能获得最新的视频流播放地址,则销毁视频播放器,释放播放器内存,告知用户视频流错误,在播放器上给用户提供一个重置按钮,刷新直播间的数据,重新开始播放;在整个视频的播放过程中,定期重复执行以上步骤,保证获取的拉流地址的正确性,保证视频正确播放。
下面结合具体函数来进行说明。
A、参见图1所示,构建线路切换的界面,当用户点击某一个按钮的时候,该按钮将自身对应的清晰度状态和属于哪一个线路的信息,传递给按钮加载视频流函数。
参见图2所示,步骤A中,构建线路切换的界面的过程如下:
A1、使用UIViewController或者TableView,搭建线路切换的界面;
A2、在搭建的线路切换的界面上,添加切换线路的按钮,每个线路下面可能有“高清、普清、超清”三个按钮中的1~3个;
A3、每个按钮上面有线路的清晰度、按钮属于哪个线路的信息,每个按钮的清晰度状态为“高清、普清、超清”中的一种。
步骤A的优点:创建了一个线路切换的界面,这个界面的布局是有多个线路供用户选择,每个线路下面有“超清、高清、普清”中的一种,方便用户切换到合适的线路,这样可以避免一个线路无法播放的时候,用户还有其他的线路可以选择。
B、如果按钮所携带的当前清晰度和当前播放的视频流的清晰度一致,且按钮所属的线路与当前播放视频流的线路一致,说明选择的线路和清晰度就是当前播放的线路和清晰度,直接中断执行按钮加载视频流函数,同时切换线路界面消失,不加载任何视频流;如果没有中断执行按钮加载视频流函数,则将按钮对应的视频流的清晰度显示在直播或者视频播放的播放器中,让用户知道自己选中的是哪一种清晰度。
步骤B的优点:如果用户选择的清晰度和线路和当前播放的视频流的清晰度和线路一致,不做任何操作,减少了不必要的拉流,能够提升用户的观看体验。
C、使用UserDefaults,存储当前用户选择的线路和清晰度,下一次用户启动App,来到直播间的时候,对于已经存储有线路和清晰度的用户,优先给该用户拉取已存储线路和对应清晰度的视频流,使用self.currentDefinition=btn.definition,保存按钮当前选择的线路和清晰度;设置动画,使线路切换的界面消失,线路切换的界面消失之后,请求loadRoomInfo接口,重新加载直播间或者视频的信息。
请求loadRoomInfo接口的时候,loadRoomInfo接口需要传入一个参数,该参数是用户选择的那一条线路的参数_currentCdn,loadRoomInfo接口去这个线路下请求房间信息。
步骤C的优点:用户选择按钮之后,这个按钮携带了这个按钮的清晰度状态和所在线路,将按钮的清晰度状态和所在线路,都传递给按钮加载视频流函数cdnBTnClick,cdnBTnClick函数就可以保留这些按钮的清晰度的状态和属于哪个线路的状态,方便下一次用户启动App的时候,去拉取上一次选择的线路房间信息和上一次选择的清晰度状态的视频流。
D、定期检查视频流是否正确有效,根据用户选择的清晰度拉取视频流来播放。为了获得稳定的视频流,可以每5秒检查视频流是否正确,每2分钟检查一下视频流是否有效,检查方法是videoSourceCheck。
参见图3所示,步骤D中,根据用户选择的清晰度拉取视频流来播放的过程如下:
D1、使用函数isViewVisable,判断视频流所在的父类的图层view是否存在;如果存在,获得每一段视频流的模型对象,该模型对象包含视频流播放地址的链接和失效时间availableDeadline;
使用函数语句if([_currentVideoSource.availableDeadlinetimeIntervalSinceDate:[NSDate date]]<=120),将视频流的失效时间和当前的时间进行比较,[NSDate date]是获取当前的时间,时间比较函数是timeIntervalSinceDate,如果两者的时间差小于预设的时间间隔,例如120秒,则请求新的视频流的地址;
D2、调用视频流请求接口,获取视频流播放地址_currentVideoSource;获得视频流播放地址_currentVideoSource后,使用函数-(NSString*)getVideoUr:(Definition)definition,根据用户选择的清晰度,生成和用户选择的清晰度相关的拉流地址;
拉流地址的生成过程是:
使用视频流播放地址_currentVideoSource,拼接上清晰度的字符串,高清是@“high”,普清是@“normal”,超清是@“super”,生成和用户选择的清晰度相关的拉流地址。
获得拉流地址后,使用播放器的setOptionValue函数,拉起最新的视频流;
D3、调用视频流请求接口,如果不能获得最新的视频流播放地址,就使用函数releasePlayer,销毁视频播放器,释放播放器内存,告知用户视频流错误,在播放器上给用户提供一个重置按钮,刷新直播间的数据,重新开始播放;在整个视频的播放过程中,定期重复执行D1~D3,例如,每5秒重复一次D1~D3,保证获取的拉流地址的正确性,同时保证了视频播放。
步骤D1实现了视频流播放地址分割,分割为120秒的视频流,每5秒检查一下视频流的有效性,120秒的视频共用一个视频流资地址的方法,保证获取的单个视频流较小,保证播放的时候拉取的视频流不是很大,避免用户看一秒拉取过多的视频流,5秒检查一次地址的有效性,快过期前去拉取最新的留地址,保证了视频播放的有效性。
步骤D2根据用户选择的清晰度,拼接一个视频流播放地址,利用这个视频流播放地址去加载对应清晰度的视频流,实现了简单、快捷地根据用户清晰度去拉取对应的视频流。
步骤D3中,如果视频流错误,及时释放播放器,在直播功能中,占用内存最大的是视频播放器,如果加载视频流错误,去释放播放器,保证有效的降低直播间控制器的内存占用。
整个步骤D是一个循环的过程,能够实现有效、方便地播放视频。
综上所述,本发明实施例搭建线路切换的界面,在直播或点播中,用户点击线路切换的中的某一个线路和清晰度的按钮后,系统根据这个按钮所携带的清晰度信息去拉取对应的视频流。本发明能够根据视频流的清晰度,实现灵活切换线路来加载视频流,提高用户的观看体验。
在直播或点播中,如果用户的网速比较慢,观看高清视频或者超清视频可能会比较卡,用户需要切换清晰度,如果切换到普清,可能可以消除播放的时候的卡顿现象;如果用户网速比较快,可以切换到高清或者超清,观看更清晰的视频,提高观看体验。
本领域的技术人员可以对本发明实施例进行各种修改和变型,倘若这些修改和变型在本发明权利要求及其等同技术的范围之内,则这些修改和变型也在本发明的保护范围之内。
说明书中未详细描述的内容为本领域技术人员公知的现有技术。