一种基于KCP协议的Android端到端直播方法技术

技术编号:24863652 阅读:51 留言:0更新日期:2020-07-10 19:14
本发明专利技术请求保护一种基于KCP协议的Android端到端直播方法,包括:101Android推流端采集直播音视频数据进行本机预览并拷贝到本机;102Android推流端对拷贝的数据进行转码;103Android推流端通过KCP将数据发送到Android播放端;104Android播放端通过KCP对数据进行接收;105Android播放端对收到的数据进行计算;106Android播放端对数据进行播放。本发明专利技术主要是通过Android推流端对采集到的音视频数据进行拷贝和转码,通过KCP协议进行发送,Android播放端对接收到的数据行进解压、计算和播放,使得直播能够在网络不佳的情况下依旧能维持观看的实时性、流畅性,优化用户的直播体验。

【技术实现步骤摘要】
一种基于KCP协议的Android端到端直播方法
本专利技术属于视频传输
,尤其基于KCP协议的Android端到端直播方法。
技术介绍
偏传统的Android端到端直播方法通常采用RTMP和HLS协议进行传播。RTMP的直播时延可以维持在2s,但是当网络不稳定时,由于RTMP是基于TCP的协议,它充分利用网络带宽的属性将使得其在直播方案中接收端无法按时接收到的数据,于是便造成了直播延时;HLS协议由于其设计原理是必须用4-10s的时间缓存M3U8文件和TS的Playlist,导致HLS的直播时延一定是4s以上。KCP协议是一个以比TCP浪费10%-20%的带宽的代价,换取平均延迟降低30%-40%,且最大延迟降低三倍的传输效果的协议,他可以在网络状态很差的场景下,更快的传输数据。由于KCP的流量耗费巨大,仅用于游戏研发领域。而在网络状态很差的情况下,KCP对流量的高耗费将使得数据更高效的传播,于是本文将它应用于Android’端到端的视频直播,可以在网络状态很差的情况下保证Android播放端能准时接收到Android推流端的视频数据,从而提高直播的实时性和流畅性。基于网络状态很差的场景,进行了本专利技术创造。
技术实现思路
本专利技术旨在解决现有技术中的问题。提出了一种使得直播能够在网络不佳的情况下依旧能维持观看的实时性、流畅性、优化用户的直播体验基于KCP协议的Android端到端直播方法。本专利技术的技术方案如下:一种基于KCP协议的Android端到端直播方法,其包括以下步骤:101.Android推流端采集直播音视频数据,进行本机预览后拷贝到本机;102.Android推流端对拷贝的数据进行转码;103.Android推流端通过KCP(快速可靠传输协议)将数据发送到Android播放端;104.Android播放端通过KCP对数据进行接收;105.Android播放端对收到的数据采用追帧算法进行计算;106.Android播放端对数据进行播放。进一步的,所述步骤101Android推流端采集直播音视频数据进行本机预览并拷贝到本机,具体步骤为:1011.直播音视频数据采集:打开手机前置或后置摄像头,再设置欲得数据的宽和高,然后在手机摄像头回调函数中循环获取视频数据Image0,每次获得的Image0为当前时刻摄像头产生的图片;1012.直播音视频数据拷贝:对每个Image0进行拷贝,将拷贝的数据Image1依次存于阻塞队列Queue0;1013.直播音视频数据预览:将Image0依次显示于手机显示屏上。进一步的,所述步骤102Android推流端对拷贝的数据进行转码的具体步骤为:1021.直播音视频拷贝数据加水印:依次从Queue0中取出数据a0,并将a0用数组a0[i0][j0]存储,其中i0表示该图片的宽度,单位为像素;j0表示该图片的高度,单位为像素;将当前日期和时间生成为一张图片,并用数组a1[i1][j1]存储,其中i1表示该水印的宽度,单位为像素;j1表示该水印的高度,单位为像素,a1中表示日期和时间的元素值为1,其它元素值为0;如需将水印加在离a0图片左边界x像素距离,离a0图片上边界y像素距离的位置,则从a0中找到从a0[x][y]开始,到a0[x+i1][y+j1]为结束的矩阵a2[i1][j1],将a1[a][b]与a2[a][b]进行对比,当a1[a][b]元素值为1时,将a2[a][b]的元素值置为c,c为想要添加的水印颜色在当前编码格式中对应的数值,其中,a∈{0,i1-1},b∈{0,j1-1};1022.直播音视频拷贝数据转码:加水印后的a0的格式为NV21,需将a0转为NV12后,再将a0按照H264编码为a1,最后,Android推流端会将a1保存到阻塞队列Queue1中,等待被发送;1023.用户可选择的将所推视频数据存于Android推流端本地:将a1进行拷贝,剔除SPS、PPS数据,即可将数据封装为MP4数据存储于指定的手机存储位置。进一步的,所述步骤103Android推流端通过KCP将数据发送到Android播放端的具体步骤为:1031.创建并初始化KCP对象:创建并初始化KCP对象Object-KCP,并为Object-KCP设置传输回调函数F0,F0的作用是调用底层的UDP接收函数F1;1032.循环调用KCP更新函数KCP-Update:每10ms调用一次KCP-Update,在KCP-Update中处理数据接收逻辑和数据发送逻辑;KCP-Update中数据接收逻辑为:应用层通过F1将收到数据D0通过KCP入口函数KCP-Input传输给KCP-Update中的F0,F0会将D0解析和二次封装成D1后传递到KCP接收函数KCP-Recv中,应用层通过调用KCP-Recv就可以获取到处理好的D1;KCP-Update中数据发送逻辑为:应用层通过KCP发送函数KCP-Send将需要发送的数据D2发送到KCP-Update,KCP-Update中会将D2分片和编号并封装成D3,再通过KCP出口函数KCP-Out调用UDP发送函数F2,将D3发送出去;1033.Android推流端对KCP-Update的调用方法:Android推流端使用KCP-Update中数据发送逻辑发送Queue1中的视频数据包,使用KCP-Update中数据接收逻辑接收Android播放端发送过来的确认收包回复ACK并且根据ACK判断是否需要进行重传。进一步的,所述步骤104Android播放端通过KCP对数据进行接收的具体步骤为:Android播放端对KCP-Update的调用方法:Android播放端使用KCP-Update中数据发送逻辑发送视频数据包的确认收包回复ACK,使用KCP-Update中数据接收逻辑接收Android推流端发送过来的视频数据包,再根据包的编号判断是否需要进行丢包,Android播放端会将需要播放的数据包保存到阻塞队列Queue2中。进一步的,所述步骤105Android播放端对收到的数据进行计算的具体步骤为:1051.Android播放端对收到的数据进行解码:从Queue2中取出需要播放的视频数据,该视频数据为H264数据,需要解码后成NV12数据后才能进行显示,解码后的数据放在阻塞队列Queue3中;1052.Android播放端对收到的视频数据进行追帧运算:假设一个时间单位t内播放端会收到一个包。当网络不稳定时,播放端可能会从第z个时间单位起收不到数据包,而在第z+n个时间单位收到n个数据包,此时播放器如果依次从Queue2中取包进行解码和播放的话,直播画面就会有延迟,因为原本在第z个时间单位就应该播放的包,在第z+n个时间单位才收到,Android播放端会启动追帧以使播放器播放与当前时间对应的数据,具体追帧算法为:丢弃第z+n个时间单位收到n个数据本文档来自技高网...

【技术保护点】
1.一种基于KCP协议的Android端到端直播方法,其特征在于,包括以下步骤:/n101.Android推流端采集直播音视频数据,进行本机预览后拷贝到本机;/n102.Android推流端对拷贝的数据进行转码;/n103.Android推流端通过KCP快速可靠传输协议将数据发送到Android播放端;/n104.Android播放端通过KCP对数据进行接收;/n105.Android播放端对收到的数据采用追帧算法进行计算;/n106.Android播放端对数据进行播放。/n

【技术特征摘要】
1.一种基于KCP协议的Android端到端直播方法,其特征在于,包括以下步骤:
101.Android推流端采集直播音视频数据,进行本机预览后拷贝到本机;
102.Android推流端对拷贝的数据进行转码;
103.Android推流端通过KCP快速可靠传输协议将数据发送到Android播放端;
104.Android播放端通过KCP对数据进行接收;
105.Android播放端对收到的数据采用追帧算法进行计算;
106.Android播放端对数据进行播放。


2.根据权利要求1所述的一种基于KCP协议的Android端到端直播方法,其特征在于,所述步骤101Android推流端采集直播音视频数据进行本机预览并拷贝到本机,具体步骤为:
1011.直播音视频数据采集:打开手机前置或后置摄像头,再设置欲得数据的宽和高,然后在手机摄像头回调函数中循环获取视频数据Image0,每次获得的Image0为当前时刻摄像头产生的图片;
1012.直播音视频数据拷贝:对每个Image0进行拷贝,将拷贝的数据Image1依次存于阻塞队列Queue0;
1013.直播音视频数据预览:将Image0依次显示于手机显示屏上。


3.根据权利要求2所述的一种基于KCP协议的Android端到端直播方法,其特征在于,所述步骤102Android推流端对拷贝的数据进行转码的具体步骤为:
1021.直播音视频拷贝数据加水印:依次从Queue0中取出数据a0,并将a0用数组a0[i0][j0]存储,其中i0表示该图片的宽度,单位为像素;j0表示该图片的高度,单位为像素;
将当前日期和时间生成为一张图片,并用数组a1[i1][j1]存储,其中i1表示该水印的宽度,单位为像素;j1表示该水印的高度,单位为像素,a1中表示日期和时间的元素值为1,其它元素值为0;
如需将水印加在离a0图片左边界x像素距离,离a0图片上边界y像素距离的位置,则从a0中找到从a0[x][y]开始,到a0[x+i1][y+j1]为结束的矩阵a2[i1][j1],将a1[a][b]与a2[a][b]进行对比,当a1[a][b]元素值为1时,将a2[a][b]的元素值置为c,c为想要添加的水印颜色在当前编码格式中对应的数值,其中,
a∈{0,i1-1},b∈{0,j1-1};
1022.直播音视频拷贝数据转码:加水印后的a0的格式为NV21,需将a0转为NV12后,再将a0按照H264编码为a1,最后,Android推流端会将a1保存到阻塞队列Queue1中,等待被发送;
1023.用户可选择的将所推视频数据存于Android推流端本地:将a1进行拷贝,剔除SPS、PPS数据,即可将数据封装为MP4数据存储于指定的手机存储位置。


4.根据权利要求3所述的一种基于KCP协议的Android端到端直播方法,其特征在于,所述步骤103Android推流端通过KCP将数据发送到Android播放端的具体步骤为:
1031.创建并初始化KCP对象:创建并初始化KCP对象Object-KCP,并为Object-KCP设置传输回调函数F0,F0的作用是调用底层的UDP接收函数F1;
1032.循环调用KCP更新函数KCP-Update:每10ms调用一次KCP-Update,...

【专利技术属性】
技术研发人员:王进周郁淳
申请(专利权)人:重庆邮电大学
类型:发明
国别省市:重庆;50

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1