一种基于gstreamer的播放器实现多屏同步播放的方法与流程

文档序号:24800476发布日期:2021-04-23 15:55阅读:1283来源:国知局
一种基于gstreamer的播放器实现多屏同步播放的方法与流程

1.本发明涉及流媒体播放技术领域,具体涉及一种基于gstreamer的播放器实现多屏同步播放的方法。


背景技术:

2.近年来,随着电子产业的迅猛发展,流媒体播放技术也不断发展完善,流媒体播放设备比如智能电视的消费需求逐年增长,卖场对商品展示的管理工作也变得更加复杂,越来越多的活动现场和宣传现场使用多屏同步播放达到震撼效果,多屏同步播放被广泛应用。
3.现有技术中一般采用三种方式进行同步播放:
4.一是使用信号分配器通过hdmi线分发到设备,该方法受传输距离限制。
5.二是通过保证播放设备同时起播达到同步,该方法存在操作繁琐,同步不精确的缺陷。
6.三是通过把播放设备分为主端和从端,主端把当前播放位置发给从端,从端从主端的播放位置开始播放,该方法存在同步不稳定的缺陷,比如播放中任意一端发生缓冲、暂停等播控操作,播放将失去同步。
7.此外,上述第二种方法和第三种方法都只能保证主端和从端播放视频同一位置,无法判断两端是否播放同一视频,所以无法同步播放视频列表。


技术实现要素:

8.本发明所要解决的技术问题是:提出一种基于gstreamer的播放器实现多屏同步播放的方法,解决传统技术中播放器多屏同步播放受距离限制、操作繁琐、同步不稳定、无法同步播放列表的问题。
9.本发明解决上述技术问题采用的技术方案是:
10.一种基于gstreamer的播放器实现多屏同步播放的方法,包括:
11.将播放设备分为主端和从端;
12.主端生成网络时钟和基准时钟,从端连接主端,从主端获取网络时钟、基准时钟、当前播放位置和当前播放url信息;
13.从端采用主端的网络时钟和基准时钟,基于gstreamer的clock机制达到播放位置同步;
14.从端判断在当前播放url和主端url不一致时,通过抛送media_info事件通知上层应用播放主端url,实现视频列表同步。
15.作为进一步优化,该方法具体包括:
16.a、主端处理步骤:
17.a1、在设置播放片源地址之前设置本地ip地址和端口号,并设置终端角色为master;
18.a2、设备系统和基于gstreamer的流媒体播放器之间的中间自适应层获取ip地址、端口号和本设备的终端角色;
19.a3、中间自适应层生成网络时钟和基准时钟;
20.a4、将网络时钟和基准时钟通过gstreamer接口设置到gstreamer框架层;
21.a5、根据本地ip地址和端口号创建socket服务线程,并监听是否捕获到新的连接;
22.a6、在捕获到新的连接后,获取当前播放位置和当前播放url并与网络时钟和基准时钟一并发送给从端;
23.b、从端处理步骤:
24.b1、在设置播放片源地址之前设置主端ip地址和主端端口号,并设置终端角色为slave;
25.b2、设备系统和基于gstreamer的流媒体播放器之间的中间自适应层获取主端ip地址、主端端口号和本设备的终端角色;
26.b3、连接主端,并获取主端的网络时钟、基准时钟、当前播放位置和播放url;
27.b4、判断当前播放url与从主端获取的播放url是否一致,若不一致,则抛送media_info事件通知上层应用播放主端url;
28.b5、通过gstreamer接口将网络时钟和基准时钟设置到gstreamer框架层;
29.b6、根据主端的当前播放位置进行与主端的同步播放。
30.作为进一步优化,步骤a还包括:
31.a7、在结束播放时,将网络时钟和基准时钟恢复为默认值,结束socket服务线程,并释放资源。
32.作为进一步优化,步骤a3中,所述中间自适应层生成网络时钟和基准时钟的方法包括:
33.首先通过gstreamer接口获取到当前默认system clock,创建新的provider_clock并获取对应的base_time,即为基准时钟;然后通过provider_clock获取clock_port,最后通过本地ip以及clock_port生成新的net_clock,即为网络时钟。
34.作为进一步优化,步骤b还包括:
35.b7、在结束播放时,将网络时钟和基准时钟恢复为默认值,并结束多屏同步socket服务线程,并释放资源。
36.作为进一步优化,步骤b3中,所述连接主端,并获取主端的网络时钟和基准时钟,具体包括:通过主端的ip地址和主端的端口号连接主端,如果连接失败,创建定时器线程,每隔5s连接一次,直到连接成功且成功获取到网络时钟、基准时钟、当前播放位置、当前播放url才结束线程释放资源。
37.本发明的有益效果是:
38.将播放设备分为主端和从端,主端生成网络时钟和基准时钟,获取当前播放位置和当前播放url共享给从端;从端使用和主端一样的网络时钟和基准时钟基于gstreamer的clock机制达到播放位置同步;从端在当前播放url和主端url不一致时,抛送media_info事件通知上层产品应用播放主端url,实现视频列表同步;从端通过设置timer定时器,定时连接主端,实现不管主端先起播还是从端先起播都能达到同步播放。
39.与现有技术相比,本方法采用网络时钟和同步url使同步播放不受设备位置限制,
不受距离限制、不需复杂的操作就能同步播放同一画面,并且持续稳定精确的同步播放多个视频。
附图说明
40.图1为本发明中的基于gstreamer的播放器实现多屏同步播放的方法流程图。
具体实施方式
41.本发明旨在提出一种基于gstreamer的播放器实现多屏同步播放的方法,解决传统技术中播放器多屏同步播放受距离限制、操作繁琐、同步不稳定、无法同步播放列表的问题。本发明将播放设备分为主端和从端,从端设置timer定时器,定时连接主端,获取主端生成的网络时钟(net_clock)、基准时钟(base_time)、当前播放位置和当前播放url(视频地址)。从端在当前播放url和主端url不一致时,抛送media_info事件(meidaplayer播放器的事件监听)通知上层产品应用播放主端的url,并且从端设置与主端相同的网络时钟和基准时钟基于gstreamer的clock机制(通过控制时间传递、管道全局系统时钟、基准时钟、运行时钟、解码输出时钟等达到音视频同步输出)实现不管主端先起播还是从端先起播都达到同步播放视频列表的功能。
42.在具体实现上,本发明中的基于gstreamer的播放器实现多屏同步播放的方法流程如图1所示,其包括以下实现步骤:
43.一、主端(master端)的处理步骤:
44.(1)、产品系统在setdatasource(设置播放片源地址)之前设置本地ip地址、端口号和终端角色。其中,ip和端口用于创建socket服务,终端角色是master。
45.(2)、产品系统和基于gstreamer的流媒体播放器之间的中间自适应层获取ip地址、端口号和终端角色。
46.(3)、中间自适应层生成net_clock和base_time:
47.首先通过gstreamer接口获取到当前默认system clock(系统时钟),创建新的provider_clock(时钟提供器)并获取对应的base_time;然后通过provider_clock获取clock_port(时钟同步端口);最后通过步骤2获取到的master_ip以及clock_port生成新的net_clock.
48.(4)、将步骤(3)中生成的net_clock和base_time通过gstreamer接口设置到gstreamer框架层,并检测当前是否达到synced(同步)状态,如果没有则设置synced回调,在收到synced回调时才能start。
49.(5)、通过步骤(2)获取到的master_ip和port创建socket服务线程,并监听是否捕获到新的连接。
50.(6)、捕获到新的连接后,获取当前播放位置、当前播放url,并和步骤(3)生成的net_clock和base_time一起发送给从端。
51.(7)、在结束播放时,将net_clock和base_time恢复为默认值,结束socket服务线程释放资源。
52.二、从端(slave端)的处理步骤:
53.(1)、产品系统在setdatasource之前设置主端ip地址、主端端口号和终端角色,ip
和端口用于连接主端的socket服务,终端角色为slave。
54.(2)、产品系统和基于gstreamer的流媒体播放器之间的中间自适应层获取master_ip、master_port和终端角色。
55.(3)、连接主端获取网络时钟和basetime:
56.通过步骤(2)获取到的master_ip,master_port连接service服务端,如果连接失败,创建定时器线程,每隔5s连接一次,直到连接成功且成功获取到net_clock、base_time、current_position、current_uri才结束线程释放资源。
57.如果没有完整获取到上述信息或获取的值不符合预期则重试,直到获取成功。
58.(4)、检测从端当前播放状态,playing状态时重置clock是无效的,需要将状态切换到pause,再设置net_clock和base_time,再将状态切换到playing。同主端一样检测当前是否达到synced状态,如果没有则设置synced回调,在收到synced回调时才能start。
59.(5)、播放器start时检测当前播放url和master的url是否一致,不一致时抛送media_info_reconfigure_uri(从属于media_info事件)事件通知上层应用重新播放master的url,并重回步骤(1)。
60.(6)、从端播放时先查询到master的播放位置,快速达到同步播放。
61.(7)、在结束播放时,将net_clock和base_time恢复为默认值,并结束多屏同步socket服务线程释放资源。
62.实施例:
63.以两台基于gstreamer播放器的android电视同步播放为例,具体实施如下:
64.1、准备两台基于gstreamer播放器的android电视:其中一台为主端,主端ip是192.168.31.1,端口是7771,另一台为从端。两台电视都在产品应用setdatasource之前设置master_ip(192.168.31.1)和master_port(7771)。
65.2、从端起播播放列表《演示片源

变形金刚》《演示片源

阿凡达》:在产品应用和基于gstreamer框架层之间的中间自适应层获取到master_ip:192.168.31.1,master_port:7771,并开始定时器每5s连接一次主端。
66.3、从端播放到《演示片源

阿凡达》时,主端起播播放列表《演示片源

变形金刚》《演示片源

阿凡达》:在产品应用和gstreamer框架层之间的中间自适应层获取到master_ip:192.168.31.1,master_port:7771。
67.4、主端生成net_clock和base_time:首先通过gstreamer接口获取到当前默认system clock,创建新的provider_clock并获取对应的base_time,然后通过provider_clock获取clock_port,最后通过步骤2获取到的192.168.31.1和端口7771生成新的net_clock。
68.5、主端连建立socket服务:通过192.168.31.1和7771创建socket服务线程,并等待从端来连接。
69.6、从端连到主端的socket服务:获取到net_clock、base_time、current_position=120s,master_url=《演示片源

变形金刚》。
70.7、从端检测到《演示片源

阿凡达》和master的《演示片源

变形金刚》不一样,通知产品应用重新起播改为播放《演示片源

变形金刚》。
71.8、从端重新起播连接到主端socket服务:获取到net_clock、base_time、current_
position=120s,master_url=《演示片源

变形金刚》。从端检测到当前播放《演示片源

变形金刚》和主端url一致。
72.9、从端使用从主端获取的网络时钟:将获取的net_clock和base_time通过gstreamer接口设置到gstreamer框架层,设置synced回调,在收到synced回调时再调用start。
73.10、从端seek到120s位置开始播放,seek是为了快速达到同步播放。
74.自此,主端和从端将根据同一个网络时钟同步播放《演示片源

变形金刚》。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1