CN115802088A - 一种多设备视频同步播放方法和装置 - Google Patents
一种多设备视频同步播放方法和装置 Download PDFInfo
- Publication number
- CN115802088A CN115802088A CN202310036189.9A CN202310036189A CN115802088A CN 115802088 A CN115802088 A CN 115802088A CN 202310036189 A CN202310036189 A CN 202310036189A CN 115802088 A CN115802088 A CN 115802088A
- Authority
- CN
- China
- Prior art keywords
- data
- video
- playing
- module
- multicast
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
本发明提供一种多设备视频同步播放方法和装置,所述方法包括提取指定文件路径中视频文件的ES数据;将所述ES数据编码成TS数据;将所述TS数据发送至组播网络,其中,所述组播网络中包括多个显示设备的视频播放器进程,每个所述视频播放器进程从所述组播网络中获取所述TS数据并播放。本发明的优点:可以降低各模块之间的耦合度,又可以使得上层应用与底层进程之间形成最低的依赖关系。此外,本发明的技术方案整体上能够使得同步播放视频过程更加稳定、响应速度更快,而且会把多屏同步播放视频与图片之间的延迟降到极低,大大降低播放程序崩溃的风险。
Description
技术领域
本发明涉及视频播放技术领域,尤其涉及一种多设备视频同步播放方法和装置。
背景技术
随着商用显示屏的用户需求向多元化和细分化的发展,多屏同步多种显示效果成为了新的需要。例如对于智慧公交车辆,当行驶到固定时间和/或特定地标建筑物时,需要能够根据播单的优先级在主、副显示屏上同显或者异显对应时间或者地点内容的播单。
现有的多屏同步显示方案如图1所示,在主、副显示屏的上层应用之间创建组播线程(swmulticast),建立端对端套接字(Socket)通信实现同步消息的发送和接收。在创建组播线程后,主显示屏读取配置文件并完成播单文件的加载,同时开启信号检测线程。在通过组播线程检测到起播信息后,主显示屏播放指定的播单,并发送同步信息至副显示屏。与此同时,副显示屏保持等待同步信息,在接收到来自主显示屏的同步信息时,同步播放主显示屏指定的播单;如果接收超时,副显示屏则播放本地播单。主、副显示屏播放所述播单,是将播单文件路径传输给底层,并调用底层耦合播放接口(swplugin)。由此,通过视频源同步和视频流传输两种方式,实现主、副显示屏的双屏同步播放。
由于这种方式的各播放器模块之间的耦合太过紧密, 主、副显示屏内部只能通过延时计算的方式进行同步, 控制和响应效率低下, 并且同步的结果受内部逻辑运行的影响, 无法实现完全同步;同时,如果播放过程中某一个功能出问题, 会连带影响到主、副显示屏的整体状况,造成播放应用程序的崩溃。
发明内容
为了避免各播放控制模块之间的过度耦合,相互影响容易导致上层应用崩溃,本发明提供一种多设备视频同步播放方法和装置,应用于能够接入网络的显示屏,采用多个显示屏播放进程分离的设计,在不同进程之间进行相互通信,通过端对端发送命令与事件实现同步显示的功能,解决现有的问题。
本发明的一个方面,提供一种多设备视频同步播放方法,所述方法包括:提取指定文件路径中视频文件的ES数据;将所述ES数据编码成TS数据;将所述TS数据发送至组播网络,其中,所述组播网络中包括多个显示设备的视频播放器进程,每个所述视频播放器进程从所述组播网络中获取所述TS数据并播放。
本发明的另一个方面,提供一种多设备视频同步播放装置,所述装置包括:控制模块、发流模块和多个视频播放器模块,其中,所述控制模块,用于控制所述发流模块和所述多个视频播放器模块;所述发流模块,用于提取指定文件路径中视频文件的ES数据;将所述ES数据编码成TS数据;将所述TS数据发送至组播网络,其中,所述组播网络中包括多个显示设备的视频播放器模块;每个所述视频播放器模块关联对应的显示设备,用于从所述组播网络中获取所述TS数据并播放。
本发明的另一个方面,提供一种电子设备,包括:
至少一个处理器;
与至少一个所述处理器通信连接的存储器;以及
存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述方法。
本发明的另一个方面,提供一种非易失性计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序用于使所述计算机执行所述方法。
本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
通过采用本发明的技术方案,通过分离出单独的播放器模块和发流模块,可以降低上层应用与播放器之间的耦合度,又可以使得上层应用与底层进程之间形成最低的依赖关系。此外,本发明的技术方案整体上能够使得同步播放视频过程更加稳定、响应速度更快,而且会把同步播放视频与图片之间的延迟降到极低,大大降低播放程序崩溃的风险。
上述简要说明仅是对本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下举例详细描述本发明的具体实施方式。
附图说明
在下面参照附图对于示例性实施例的描述中,本发明的更多细节、特征和优点被公开,在附图中:
图1示出了现有技术中在主、副显示屏上进行同步显示的流程图;
图2示出了本发明中上层控制交互模块建立通信的流程图;
图3示出了本发明提供的多设备视频同步播放和播放方法的流程图;
图4示出了本发明中发流模块处理视频流的流程图;
图5示出了本发明中虚拟窗口的工作流程图;
图6示出了本发明中虚拟音轨的工作流程图;
图7示出了本发明中播放器模块建立通信和选择播放视频流的流程图;
图8示出了本发明中交互模块与播放器模块进行通信的流程图;
图9示出了本发明中本地播放器播放视频流的流程图;
图10示出了本发明提供的多设备视频同步播放和播放装置的结构图。
具体实施方式
下面将参照附图更详细地描述本发明的实施例。虽然附图中显示了本发明的某些实施例,然而应当理解的是,本发明可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本发明。应当理解的是,本发明的附图及实施例仅用于示例性作用,并非用于限制本发明的保护范围。
应当理解,本发明的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本发明的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。需要注意,本发明中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
本发明实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
实施例一
在本实施例中提供一种多设备视频同步播放和播放方法,所述方法应用于能够接入网络的显示设备,所述显示设备包括主显示屏和至少一个副显示屏。所述主显示屏整理视频流向信息中写入视频流并编号,在获得所述起播信息后开始播放视频流,固定组播网络地址并发送起播信息(组播发流);所述至少一个副显示屏监听该组播网络地址,获得所述起播信息后开始播放同一视频流,从而实现同步播放视频流。在所述主显示屏播放结束后,向播放信息中写入下一个视频流并编号,重复上述发送信息的操作,通过视频源的同步实现不同显示屏之间的实时同步播放。
多设备视频同步播放
如图2所示,主显示屏在开机后初始化设备硬件并打开进程间通信(IPC),所述主显示屏的上层应用在启动完成后控制交互模块(swplugin)等待建立通信。交互模块建立并打开所述进程间通信(IPC)的线程包括创建与打开两个fifo文件用于管道通信,路径分别为:
/tmp/plugin_ctrl
/tmp/encdec_ctrl
交互模块端的plugin_ctrl管道为发送命令管道,需要以只写方式打开文件描述符;交互模块端的encdec_ctrl管道为接收事件管道,需要以只读方式打开文件描述符。根据管道特性,两者的打开顺序必须是先打开plugin_ctrl管道发送命令(只写),后打开encdec_ctrl管道接收事件(只读)。其中,以阻塞方式读取encdec_ctrl管道的数据,在管道为空时阻塞方式的情况下,当所述管道中有数据时,解除阻塞并读取数据。
在所述主显示屏进行初始化和等待建立通信的同时,发流模块(swencdec)初始化网络组播套接字,进入等待通信状态。发流模块进行所述进程间通信(IPC)的线程包括创建与打开两个fifo文件用于管道通信,路径分别为:
/tmp/plugin_ctrl
/tmp/encdec_ctrl
发流模块端的encdec_ctrl管道为接收命令管道,需要以只读方式打开文件描述符;发流模块端的plugin_ctrl管道为发送事件管道,需要以只写方式打开文件描述符。根据管道特性,两者的打开顺序必须是先打开plugin_ctrl管道发送事件(只写),后打开encdec_ctrl管道接收命令(只读)。其中,以阻塞方式读取plugin_ctrl管道的数据,在管道为空时阻塞的情况下,当所述管道中有数据时,解除阻塞并读取数据。
在所述主显示屏启动完成后,所述主显示屏上层应用通过交互模块提供的接口swplugin_best.so与发流模块建立并进行所述进程间通信(IPC),发送命令与数据,控制发流模块。交互模块与发流模块之间的通信采用轻量级管道通信,所述管道通信步骤包括:
(1)交互模块准备发送起播start命令,先建立连接,包括:交互模块发送hello命令,发流模块上抛hi事件,发流模块上抛ready事件;
(2)交互模块发送start命令,监听等待发流模块的ready事件;
(3)发流模块初始化完成,上抛ready事件;
(4)交互模块发送组播地址、文件路径等数据;
(5)发流模块开始发流,上抛begin事件,交互模块接收到事件后,回调通知上层应用,上层应用根据内部逻辑可再次通过交互模块发送stop、die、restart等命令;
(6)发流模块发流结束,上抛over事件,交互模块接收到事件后,回调通知上层应用处理。
所述管道通信的通信命令说明如下:
start:命令发流模块初始化模块并且发流指定文件;
restart:命令发流模块发流指定文件;
stop:命令发流模块停止发流;
die:命令发流模块退出进程;
hello:模拟握手协议发送命令建立连接。
所述管道通信的通信事件说明如下:
exit:发流模块上抛退出进程事件;
over:发流模块上抛发流结束事件;
begin:发流模块上抛发流开始事件;
hi:发流模块模拟握手协议建立连接事件;
ready:发流模块上抛确认接收命令事件。
其中,所述建立连接是指交互模块和发流模块通过模拟TCP三次握手过程建立管道通信,交互模块发送调用命令控制发流模块并传输组播视频地址和文件路径数据。当plugin_ctrl管道中有数据时,表示交互模块即将有命令发送到发流模块,发流模块通过encdec_ctrl管道回应交互模块,并准备接收命令和数据。
如果发流模块意外崩溃断开管道通信,此时发流模块端的plugin_ctrl管道(只写)中无数据传输,导致交互模块端的encdec_ctrl管道(只读)阻塞;将发流模块端的plugin_ctrl管道(只写)关闭后,交互模块端的encdec_ctrl管道(只读)会解除阻塞,以非阻塞方式循环读取空字符串;将交互模块端的plugin_ctrl管道(只写)关闭后再尝试重新打开,使得阻塞在open函数上,等待发流模块端的plugin_ctrl管道(只写)重新打开;如果发流模块从崩溃中恢复正常,发流模块端的plugin_ctrl管道(只写)重新打开并传输数据,此时交互模块端的encdec_ctrl管道(只读)解除阻塞,管道通信会重新建立恢复通信。
相应的,如果交互模块意外崩溃断开管道通信,此时交互模块端的plugin_ctrl管道(只写)中无数据传输,导致发流模块端的encdec_ctrl管道(只读)阻塞;将交互模块端的plugin_ctrl管道(只写)关闭后,发流模块端的encdec_ctrl管道(只读)会解除阻塞,以非阻塞方式循环读取空字符串;将发流模块端的plugin_ctrl管道(只写)关闭后再尝试重新打开,使得阻塞在open函数上,等待交互模块端的plugin_ctrl管道(只写)重新打开;如果交互模块从崩溃中恢复正常,交互模块端的plugin_ctrl管道(只写)重新打开并传输数据,此时发流模块端的encdec_ctrl管道(只读)解除阻塞,管道通信会重新建立恢复通信。
如图3和图4所示,在所述主显示屏的交互模块与发流模块之间的通信建立连接完成后,发流模块处理准备播放的视频流文件。
步骤S101:上层应用通过交互模块发送起播命令启动组播发流,将视频流文件的文件路径发送到发流模块。
步骤S102:根据接收到的文件路径,发流模块读取视频流文件,打开并绑定UDP套接字。
所述步骤S102进一步包括:
步骤S201:发流模块根据所述文件路径打开视频流文件,取出文件中的音视频流数据;
步骤S202:打开组播网络UDP套接字(Socket),获取用于将所述音视频流数据发送至组播网络的UDP文件描述符;
步骤S203:绑定组播网络UDP套接字(Socket)的地址与端口。
步骤S103:通过读取文件音视频流的原始流数据的每一帧计算显示时间戳并转换为播放时间,控制读取文件速率以防止绑定的播放器播放所述视频流时缓冲溢出。
所述步骤S103进一步包括:
步骤S301:启动解码器esbuf(与组播播放器绑定运行);
步骤S302:开启解复用线程,并将文件音视频流的原始流(Elementary Streams,ES)数据发送到解码器esbuf;
步骤S303:读取文件音视频流的原始流数据的每一帧,并判断确定所述文件的文件尾;
步骤S304:将所述原始流数据的每一帧进行时间基转换,计算得到所述原始流数据的每一帧的显示时间戳(Presentation Time Stamp,PTS);
步骤S305:使用av_read_frame控制所述原始流数据的每一帧的读取速度,将所述原始流数据的每一帧的时间戳表示的时间转换为播放时间,所述播放时间与显示设备的系统时间的差值为一个固定数值,作为解复用线程的延时控制时间限制;
步骤S306:计算文件音视频流读取的每一帧转换的时间戳;
步骤S307:计算文件音视频流的每一帧播放的时间戳;
步骤S308:计算所述原始流的解复用线程的延时控制时间;
步骤S309:在解复用线程过程中对所述原始流数据进行组帧并添加头信息,其中所述头信息不能作为单独的一帧;
步骤S310:将所述原始流数据与所述原始流的每一帧对应的所述时间戳写入解码器esbuf;
步骤S311:释放所述原始流数据的每一帧数据。
其中,所述解复用线程引入ffmpeg动态库实现,通过读取文件音视频流数据的每一帧以提取形成音频文件和视频文件,将不同编码格式的文件音视频流数据解复用,提取出音频文件和视频文件的原始流数据。由于利用ffmpeg动态库解复用时提取出的原始流数据是没有ADTS(Audio Data Transport Stream)头部的纯净数据,故上述直接提取出来的文件音视频流数据并不能直接播放,需要对所述原始流数据进行组帧并添加ADTS头部。此外,由于ffmpeg动态库解复用时速率过快,造成解码器的缓冲区堆满,占用系统资源过高,并且存在切换场景缓慢和线程不安全等等问题,故还需要对解复用线程进行有效的速率控制。
步骤S104:将文件音视频流的原始流数据输出重定向至虚拟窗口与虚拟音轨。
在所述步骤S104中,虚拟窗口(WINDOW)的工作流程如图5所示,所述工作流程包括如下步骤:
步骤SW401:初始化显示屏(VO);
步骤SW402:创建显示窗口;
步骤SW403:绑定视频源;
步骤SW404:请求图像;
步骤SW405:释放使用完毕的图像;
步骤SW406:是否继续取帧,如果是,返回步骤S404W;如果不是,进入步骤S407W;
步骤SW407:去使能虚拟窗口(WINDOW);
步骤SW408:去绑定虚拟窗口(WINDOW);
步骤SW409:销毁显示窗口;
步骤SW410:去初始化。
在所述步骤S104中。虚拟音轨(TRACK)的工作流程如图6所示,所述工作流程包括如下步骤:
步骤ST401:绑定视频源;
步骤ST402:初始化和创建VENC(编解码模块);
步骤ST403:将虚拟窗口(WINDOW)与VENC绑定;
步骤ST404:启动VENC编码;
步骤ST405:虚拟窗口(WINDOW)与视频编码工作中;
步骤ST406:停止VENC编码;
步骤ST407:解除虚拟窗口(WINDOW)与VENC绑定;
步骤ST408:销毁和去初始化VENC;
步骤ST409:去使能虚拟窗口(WINDOW);
步骤ST410:去绑定虚拟窗口(WINDOW);
步骤ST411:销毁显示窗口。
其中,虚拟窗口(WINDOW)与虚拟音轨(TRACK)绑定组播播放器作为其音视频数据源,两者作为一种特殊的对象,仅模拟操作对输入的音频图像进行处理,处理后的音视频数据并不用于实际播放,而是提供给后级模块使用。
步骤S105:传输流(Transport Stream,TS)编码器根据其绑定的工作模式,从虚拟窗口与虚拟音轨中取出完成同步处理的所述原始流数据,将其编码成文件音视频流的传输流数据,发送到UDP组播网络。
视频流播放
本实施例的一个可选方式中,如图7所示,播放器模块(swbusplayer)在通信建立后向上层应用反馈播放状态,根据上层应用通过所述主显示屏的交互模块发送的起播信息,选择集成的组播播放器、本地播放器和/或DTMB播放器以同步播放视频流。
如图8所示,在交互模块与播放器模块之间的通信连接,采用端对端本地套接字(socket)通信。其中,两者约定转换成相同的数据结构体进行数据传输,通过解析所述数据结构体来获取有效的数据。
所述本地套接字(socket)通信步骤包括:
(1)建立通信首次调用player_init初始化设备;
(2)根据场景需求初始化指定播放器;
(3)根据场景需求指定播放器起播;
(4)根据场景需求指定播放器输出声音,并且进行音量控制;
(5)根据场景需求调整指定播放器画面大小。
其中,本地套接字(socket)初始化步骤包括:
(1)文件绑定:
交互模块写端路径绑定文件:"/tmp/.writetoplayer"
交互模块读端路径绑定文件:"/tmp/.readfromplayer"
发流模块写端路径绑定文件:"/tmp/.readfromplayer"
发流模块读端路径绑定文件:"/tmp/.writetoplayer"
(2)读端打开文件描述符,并且调用init_recv_socket初始化,进入线程循环接收数据;
(3)写端调用socket()函数打开文件描述符;
(4)调用sendto()函数往写端文件描述符发送数据;
(5)进行命令与事件通信。
所述套接字(socket)通信的通信命令说明如下:
player_init:初始化设备,需要在开启所有播放器之前调用;
set_volume:设置音量;
audio_play:指定某个播放器播放声音;
set_mute:静音开关;
set_rect:指定某个播放器设置画面大小;
local_init:初始化Local本地播放器;
local_deinit:去初始化本地播放器;
local_start:命令本地播放器开启播放指定编号的视频文件;
local_stop:命令本地播放器停止播放;
multi_init:初始化组播播放器;
multi_deinit:去初始化组播播放器;
multi_start:命令组播播放器开启接收组播数据;
multi_stop:命令组播播放器停止接收组播数据;
dtmb_init:初始化DTMB播放器;
dtmb_deinit:去初始化DTMB播放器;
dtmb_start:命令DTMB播放器进入播放状态;
dtmb_stop:命令DTMB播放器退出播放状态;
dtmb_search:命令DTMB播放器开始搜台。
所述套接字(socket)通信的通信事件说明如下:
dtmb_tuner_signal:上抛天线检测的信号状态;
dtmb_getprogress:上抛DTMB播放器的搜台进度;
localplay_end:上抛本地播放器播放结束事件;
multiplayer_begin_play:上抛组播播放器接收到组播数据事件。
如图3所示,组播播放器控制在所述主显示屏的屏幕下半区域内视频流的播放,包括如下步骤:
步骤S106:组播播放器从UDP组播网络接收由发流模块同步处理过的稳定的文件音视频流的传输流数据,并以低延时模式播放,从而实现同步播放视频流。
其中,所述低延时模式播放是指播放器不进行缓冲也不进行音视频同步,立刻播放接收到的数据。
所述步骤S106进一步包括如下步骤:
步骤S601:初始化显示屏;
步骤S602:初始化组播播放器,绑定解码器esbuf与组播播放器窗口,设置解码器esbuf参数和组播播放器窗口大小层级等;
步骤S603:接收上层应用的命令和参数,启动数据接收线程,准备开始播放来自UDP组播网络的文件音视频流;
步骤S604:执行接收所述文件音视频流的线程,进一步包括如下步骤:
步骤S6041:打开组播网络UDP套接字(Socket),获取UDP文件描述符udp_fd用于接收文件音视频流数据;
步骤S6042:通过setsockopt设置套接字(Socket)选项;
步骤S6043:设置UDP套接字(Socket)接收buf的大小;
步骤S6044:绑定组播网络UDP套接字(Socket)的地址与端口以加入到所述UDP组播网络中;
步骤S6045:调用select函数解除阻塞以获取来自所述UDP组播网络的视频流数据;
步骤S6046:解析所述数据,获取文件的音视频信息(PMT表),用于解码播放;
步骤S6047:获取解码器TS Buffer;
步骤S6048:调用recvfrom从所述UDP文件描述符udp_fd获取文件音视频数据;
步骤S6049:将有效的所述文件音视频数据写入解码器TS Buffer。
其中,当设置UDP套接字(Socket)接收buf的大小时,在应用程序这一级别,可以通过setsockopt系统调用动态地修改所述UDP套接字(Socket)接收buf的大小;在系统配置这一级别,可以在root权限下修改所述UDP套接字(Socket)接收buf的大小。如果将默认值设置太小,会导致数据传输时丢包;并且注意默认值要小于系统内核节点的数值:/proc/sys/net/core/rmem_max,否则超出的数值不会生效,所述系统内核节点可以用文件IO读取修改。
在组播(Multi)播放器同步播放视频流的同时,地面数字多媒体广播(DTMB)播放器、本地(Local)播放器以共用的方式控制在所述主显示屏的屏幕上半区域内视频流的播放,并且同一时间内仅有一个播放器控制在所述屏幕上半区域内视频流的播放。
如图3所示,当有调谐器(Tuner)信号时,优先选择DTMB播放器控制在所述主显示屏的屏幕上半区域内视频流的播放,包括如下步骤:
步骤S107:DTMB播放器播放来自通过同轴线传输的地面电视信号,所述信号在信号源已实现视频同步。
如图3所示,当DTMB播放器没有控制在所述主显示屏的屏幕上半区域内视频流的播放时,选择本地播放器控制在所述主显示屏的屏幕上半区域内视频流的播放,包括如下步骤:
步骤S108:本地播放器播放来自所述主显示屏内部存储器的视频文件,所述视频文件在主显示屏和至少一个副显示屏之间保持一致,通过显示屏之间的通信及进程间通信(IPC)实现同步播放。
如图9所示,所述步骤S108进一步包括如下步骤:
步骤S1081:本地播放器开始运行,与上层应用建立通信,上层应用发送start命令,将同步信号状态设为SYNC_OK;
步骤S1082:断开DTMB播放器窗口,绑定并使能本地播放器窗口;
步骤S1083:清理上一次播放对象,确保系统资源释放;
步骤S1084:校验同步信号,判断所述主显示屏和至少一个副显示屏之间的同步状态,如果同步状态不是SYNC_WAIT则继续向下执行;如果是SYNC_WAIT,则在超时范围内等待同步,超时则同步状态变更为SYNC_LOST,再向下执行;
步骤S1085:根据上层应用发来的start命令附带的文件索引编号,获取视频文件路径;
步骤S1086:开启播放;
步骤S1087:播放结束,向上层应用发送结束播放事件(附带播放完毕的文件索引编号)通知,本地播放器进入同步信号状态,如果上一次播放时同步信号为SYNC_OK,那么进入同步信号SYNC_WAIT状态;
步骤S1088:在进入同步信号SYNC_WAIT状态后,如果上层应用在等待时间超时后都没有处理本地播放器的结束事件,那么本地播放器进入同步信号SYNC_LOST状态,在此状态下本地播放器自动循环播放本地视频文件,直到上层应用再次调用步骤S1081,恢复将同步信号状态设为SYNC_OK,实现循环逻辑与恢复同步;
步骤S1089:当一个视频文件播放结束时,会将当前视频文件编号随播放结束事件上抛给上层应用,上层应用在调用本地播放器发送start命令的时候,会下发新的视频文件编号,在所述主显示屏和至少一个副显示屏之间本地播放器的同步,就是通过对视频文件编号的控制实现。
其中,所述视频文件编号是本地播放器通过扫描本地视频文件夹,将文件夹中的有效视频文件生成一个链表进行维护,此链表可以按照数字和字母从小到大的顺序排列视频文件名,并且给每个视频文件编号进行索引生成的。
基于同一发明构思,本发明还提供了与实施例一的方法所对应的装置实施例,详见实施例二。
实施例二
在本实施例中提供一种多设备视频同步播放装置1,如图9所示,所述应用于能够接入网络的显示屏,所述显示屏包括主显示屏和至少一个副显示屏。
所述装置包括发流模块101,用于当上层应用通过所述主显示屏的交互模块发送起播命令时启动组播发流,接收文件路径并根据接收到的所述文件路径读取文件,打开并绑定UDP套接字;通过读取文件音视频流的原始流数据的每一帧计算时间戳并转换为播放时间,控制读取文件速率以防止绑定的播放器播放所述视频流时缓冲溢出;将文件音视频流的原始流数据输出重定向至虚拟窗口(WINDOW)与虚拟音轨(TRACK);利用传输流编码器根据其绑定的工作模式,从虚拟窗口(WINDOW)与虚拟音轨(TRACK)中取出完成同步处理的所述原始流数据,将其编码成文件音视频流的传输流数据,发送到UDP组播网络。
在本实施例中还提供一种视频流播放装置2,如图9所示,所述应用于能够接入网络的显示屏,所述显示屏包括主显示屏和至少一个副显示屏。所述装置在获得所述起播信息后控制所述主显示屏播放视频流,同时控制所述至少一个副显示屏播放同一视频流,通过视频源的同步实现不同显示屏之间的实时同步播放。
所述装置包括播放器模块201,用于在通信建立后向上层应用反馈播放状态,根据上层应用通过所述主显示屏的交互模块发送的起播信息,选择集成的组播播放器2011、本地播放器2012和/或DTMB(地面数字多媒体广播)播放器2013以同步播放视频流。
组播播放器2011控制在所述主显示屏的屏幕下半区域内视频流的播放,从UDP组播网络接收由发流模块同步处理过的稳定的文件音视频流的传输流数据,并以低延时模式播放,从而实现同步播放视频流;其中,所述低延时模式播放是指播放器不进行缓冲也不进行音视频同步,立刻播放接收到的数据。
在组播播放器2011同步播放视频流的同时,本地播放器2012和DTMB播放器2013以共用的方式控制在所述主显示屏的屏幕上半区域内视频流的播放,并且同一时间内仅有一个播放器控制在所述屏幕上半区域内视频流的播放。当有调谐器(Tuner)信号时,优先选择DTMB播放器2013控制在所述主显示屏的屏幕上半区域内视频流的播放,播放来自通过同轴线传输的地面电视信号,所述信号在信号源已实现视频同步。当DTMB播放器2013没有控制在所述主显示屏的屏幕上半区域内视频流的播放时,选择本地播放器2012控制在所述主显示屏的屏幕上半区域内视频流的播放,播放来自所述主显示屏内部存储器的视频文件,所述视频文件在主显示屏和至少一个副显示屏之间保持一致,通过显示屏之间的通信及进程间通信(IPC)实现同步播放。
由于本实施例所介绍的装置,为实施本发明实施例一的方法所采用的装置,故而基于本发明实施例一所介绍的方法,本领域所属技术人员能够了解所述装置的具体结构及变形,故而在此不再赘述。凡是为实施本发明实施例一的方法所采用的装置都属于本发明所欲保护的范围。
基于同一发明构思,本发明还提供了与实施例一的方法所对应的电子设备实施例,详见实施例三。
实施例三
在本实施例中提供一种电子设备,所述电子设备包括:
至少一个处理器;
与至少一个所述处理器通信连接的存储器;以及
存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现本发明实施例一的方法。
由于本实施例所介绍的电子设备,为实施本发明实施例一的方法所采用的设备,故而基于本发明实施例一所介绍的方法,本领域所属技术人员能够了解所述电子设备的具体实施方式以及其各种变化形式,故而在此对于该电子设备如何实现本发明实施例一的方法不再详细介绍。只要本领域所属技术人员为实施本发明实施例一的方法所采用的设备,都属于本发明所欲保护的范围。
基于同一发明构思,本发明还提供了与实施例一的方法所对应的非易失性计算机可读存储介质实施例,详见实施例四。
实施例四
本领域所属技术人员应当明白,本发明实施例可提供为所述方法、装置或计算机程序产品,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。因此,如下所述,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于光学存储器、磁性存储器、非易失性半导体存储器)上实施的计算机程序产品的形式。
在本实施例中提供一种非易失性计算机可读存储介质,如图4所示,所述非易失性计算机可读存储介质上存储有计算机程序,其特征在于,所述计算机程序用于使所述计算机执行本发明实施例一的方法。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,本发明所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
Claims (10)
1.一种多设备视频同步播放方法,其特征在于,所述方法包括:
提取指定文件路径中视频文件的ES数据;
将所述ES数据编码成TS数据;
将所述TS数据发送至组播网络,其中,所述组播网络中包括多个显示设备的视频播放器进程,每个所述视频播放器进程从所述组播网络中获取所述TS数据并播放。
2.根据权利要求1所述的方法,其特征在于,在所述提取指定文件路径中视频文件的ES数据之前,还包括:
接收上层控制进程发送的组播地址和文件路径。
3.根据权利要求1所述的方法,其特征在于,所述将所述ES数据编码成TS数据,进一步包括:
根据所述ES数据每一帧的显示时间戳确定所述帧的播放时间,作为所述TS数据每一帧的播放时间。
4.根据权利要求1所述的方法,其特征在于,在每个所述视频播放器进程从所述组播网络中获取所述TS数据并播放之前,还包括:
接收上层控制进程发送的组播地址,加入所述组播网络。
5.一种多设备视频同步播放装置,其特征在于,所述装置包括:控制模块、发流模块和多个视频播放器模块,其中,
所述控制模块,用于控制所述发流模块和所述多个视频播放器模块;
所述发流模块,用于提取指定文件路径中视频文件的ES数据;将所述ES数据编码成TS数据;将所述TS数据发送至组播网络,其中,所述组播网络中包括多个显示设备的视频播放器模块;每个所述视频播放器模块关联对应的显示设备,用于从所述组播网络中获取所述TS数据并播放。
6.根据权利要求5所述的装置,其特征在于,所述发流模块,还用于在所述提取指定文件路径中视频文件的ES数据之前,接收上层控制模块发送的组播地址和文件路径。
7.根据权利要求5所述的装置,其特征在于,所述发流模块,还用于在将所述ES数据编码成TS数据过程中,根据所述ES数据每一帧的显示时间戳确定所述帧的播放时间,作为所述TS数据每一帧的播放时间。
8.根据权利要求5所述的装置,其特征在于,每个所述视频播放器模块,还用于在从所述组播网络获取所述TS数据并播放之前,接收所述控制模块发送的组播地址,加入所述组播网络。
9.一种电子设备,包括:
至少一个处理器;
与至少一个所述处理器通信连接的存储器;以及
存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至4中任一项所述的方法。
10.一种非易失性计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序用于使所述计算机执行根据权利要求1至4中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310036189.9A CN115802088B (zh) | 2023-01-10 | 2023-01-10 | 一种多设备视频同步播放方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310036189.9A CN115802088B (zh) | 2023-01-10 | 2023-01-10 | 一种多设备视频同步播放方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115802088A true CN115802088A (zh) | 2023-03-14 |
CN115802088B CN115802088B (zh) | 2023-04-28 |
Family
ID=85428921
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310036189.9A Active CN115802088B (zh) | 2023-01-10 | 2023-01-10 | 一种多设备视频同步播放方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115802088B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111601180A (zh) * | 2020-05-14 | 2020-08-28 | 上海济丽信息技术有限公司 | 一种基于pts的分布式拼接大屏幕视频流集群同步显示系统 |
CN114339290A (zh) * | 2021-12-30 | 2022-04-12 | 杭州当虹科技股份有限公司 | 大屏管理子系统、大屏同步播放系统和方法 |
CN114401264A (zh) * | 2022-01-21 | 2022-04-26 | 厦门海菱科技股份有限公司 | 一种车载多屏异显输出方法、装置、设备和介质 |
CN115297274A (zh) * | 2022-08-04 | 2022-11-04 | 京东方科技集团股份有限公司 | 多屏视频显示方法、系统、播放端及存储介质 |
US20220408161A1 (en) * | 2021-06-21 | 2022-12-22 | S.A. Vitec | Media content display synchronization on multiple devices |
-
2023
- 2023-01-10 CN CN202310036189.9A patent/CN115802088B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111601180A (zh) * | 2020-05-14 | 2020-08-28 | 上海济丽信息技术有限公司 | 一种基于pts的分布式拼接大屏幕视频流集群同步显示系统 |
US20220408161A1 (en) * | 2021-06-21 | 2022-12-22 | S.A. Vitec | Media content display synchronization on multiple devices |
CN114339290A (zh) * | 2021-12-30 | 2022-04-12 | 杭州当虹科技股份有限公司 | 大屏管理子系统、大屏同步播放系统和方法 |
CN114401264A (zh) * | 2022-01-21 | 2022-04-26 | 厦门海菱科技股份有限公司 | 一种车载多屏异显输出方法、装置、设备和介质 |
CN115297274A (zh) * | 2022-08-04 | 2022-11-04 | 京东方科技集团股份有限公司 | 多屏视频显示方法、系统、播放端及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115802088B (zh) | 2023-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104202677B (zh) | 支持多窗口应用的多屏显示和控制的方法与装置 | |
WO2021169141A1 (zh) | 在显示设备中显示音轨语言的方法及显示设备 | |
JP4206407B2 (ja) | ピクチャインピクチャ機能を遂行するマルチメディア信号整合システム及び方法 | |
JP5767810B2 (ja) | オンスクリーンディスプレイデータの既存ディスプレイデバイスへの配送 | |
CN103581754A (zh) | 一种数据显示方法及智能设备 | |
US7305173B2 (en) | Decoding device and decoding method | |
CN104159151A (zh) | 一种在ott盒子上进行视频截取并处理的装置及方法 | |
CN102510541A (zh) | 多屏互动的音视频内容切换方法及媒体播放器 | |
WO2020098504A1 (zh) | 一种视频切换的控制方法及显示设备 | |
JP2003250097A (ja) | データの転送及び処理 | |
JP2015201699A (ja) | 受信装置、受信方法、送信装置、及び、送信方法 | |
WO2009076723A1 (en) | Device and method for synchronisation of digital video and audio streams to media presentation devices | |
CN108449634B (zh) | 一种多进程解码的播放方法、计算机设备和存储介质 | |
CN106534935A (zh) | 硬件资源冲突的控制方法及装置 | |
CN204013943U (zh) | 一种在ott盒子上进行视频截取并处理的装置 | |
CN101202919B (zh) | 一种数字电视接收机及其中间件 | |
WO2024041672A1 (zh) | 一种基于iptv业务的vr全景视频播放方法和系统 | |
CN113473194B (zh) | 一种智能设备及响应方法 | |
CN115802088B (zh) | 一种多设备视频同步播放方法和装置 | |
CN113378092A (zh) | 一种视频video播放管理方法及显示设备 | |
US20080155113A1 (en) | Device, system and method for remotely processing multimedia stream | |
CN101399905A (zh) | 交互式机顶盒 | |
CN103686336A (zh) | 一种视频的播放控制方法和装置 | |
CN114630101A (zh) | 显示设备、vr设备及虚拟现实应用内容的显示控制方法 | |
CN112770164A (zh) | 一种视频同步播放方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |