CN116132735A - 一种多媒体播放方法、浏览器及电子设备 - Google Patents

一种多媒体播放方法、浏览器及电子设备 Download PDF

Info

Publication number
CN116132735A
CN116132735A CN202211708270.9A CN202211708270A CN116132735A CN 116132735 A CN116132735 A CN 116132735A CN 202211708270 A CN202211708270 A CN 202211708270A CN 116132735 A CN116132735 A CN 116132735A
Authority
CN
China
Prior art keywords
data
video
original
video data
module
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.)
Pending
Application number
CN202211708270.9A
Other languages
English (en)
Inventor
杨方方
李中虎
陈喆
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Hikvision Digital Technology Co Ltd
Original Assignee
Hangzhou Hikvision Digital Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou Hikvision Digital Technology Co Ltd filed Critical Hangzhou Hikvision Digital Technology Co Ltd
Priority to CN202211708270.9A priority Critical patent/CN116132735A/zh
Publication of CN116132735A publication Critical patent/CN116132735A/zh
Priority to PCT/CN2023/103992 priority patent/WO2024139129A1/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/431Generation of visual interfaces for content selection or interaction; Content or additional data rendering
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/4402Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Human Computer Interaction (AREA)
  • Computing Systems (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

本申请实施例提供了一种多媒体播放方法、浏览器及电子设备。其中,所述方法包括:获取待通过浏览器进行播放的封装视频码流,其中,所述浏览器中集成有硬件解码器和网页装配Wasm模块;调用所述Wasm模块解析所述封装视频码流,得到所述封装视频码流中的编码视频数据;调用所述硬件解码器提供的接口,将所述编码视频数据输入至所述硬件解码器中进行硬解码,得到原始视频数据;渲染所述原始视频数据,得到视频画面;展示所述视频画面。能够在提高兼容性的同时降低视频播放占用的系统资源。

Description

一种多媒体播放方法、浏览器及电子设备
技术领域
本申请涉及多媒体技术领域,特别是涉及一种多媒体播放方法、浏览器及电子设备。
背景技术
由于视频数据的数据量往往较大,为便于视频码流的传输,视频码流中的视频数据往往是经过编码的,因此在浏览器播放视频码流的过程中需要进行解码。相关技术中,浏览器通过运行解码器,如Video(视频)标签,进行解码。
若浏览器运行的解码器为硬件解码器,则只能够解码硬件支持的视频格式,兼容性较差。而若浏览器运行的解码器为软件解码器,则由于软解所需计算量较大,导致因播放视频占用过多系统资源。因此,如何在提高兼容性的同时降低播放视频占用的系统资源成为亟待解决的技术问题。
发明内容
本申请实施例的目的在于提供一种多媒体播放方法、浏览器及电子设备,以实现在提高兼容性的同时降低视频播放所需占用的系统资源。具体技术方案如下:
根据本申请的一方面,提供了一种多媒体播放方法,包括:
获取待通过浏览器进行播放的封装视频码流,其中,所述浏览器中集成有硬件解码器和网页装配Wasm模块;
调用所述Wasm模块解析所述封装视频码流,得到所述封装视频码流中的编码视频数据;
调用所述硬件解码器提供的接口,将所述编码视频数据输入至所述硬件解码器中进行硬解码,得到原始视频数据;
渲染所述原始视频数据,得到视频画面;
展示所述视频画面。
在一种可能的实施例中,所述调用所述硬件解码器提供的接口,将所述视频帧数据输入至所述硬件解码器中进行硬解码,得到原始视频数据,包括:
调用所述硬件解码器提供的接口,将所述视频数据输入至由主线程或后台进程运行的所述硬件解码器进行硬解码,得到原始视频数据,所述后台进程为独立于用于运行所述浏览器的主线程的线程。
在一种可能的实施例中,所述渲染所述原始视频数据,得到视频画面,包括:
通过所述主线程或所述后台进程调用所述浏览器提供的接口渲染所述原始视频数据,得到视频画面。
在一种可能的实施例中,所述原始视频数据为位图数据,所述方法还包括:
将所述原始视频数据存储于预设的位图链表;
所述渲染所述原始视频数据,得到视频画面,包括:
从所述位图链表中提取位图数据;
渲染提取到的位图数据,得到视频画面。
在一种可能的实施例中,所述调用所述硬件解码器提供的接口,将所述视频数据输入至由主线程或后台进程运行的所述硬件解码器进行硬解码,得到原始视频数据,包括:
调用所述硬件解码器提供的接口,通过传递消息PostMessage方式将所述视频数据输入至由主线程或后台进程运行的所述硬件解码器进行硬解码,得到原始视频数据。
在一种可能的实施例中,所述调用所述Wasm模块解析所述封装视频码流,得到所述封装视频码流中的编码视频数据,包括:
调用所述Wasm模块中的解复用DEMUX模块解析所述封装视频码流,得到视频裸数据;
将所述视频裸数据作为所述封装视频码流中的编码视频数据存储于预设的裸数据链表。
在一种可能的实施例中,所述渲染所述原始视频数据,得到视频画面,包括:
通过所述主线程或所述后台进程调用所述浏览器提供的接口渲染所述原始视频数据,得到视频画面。
在一种可能的实施例中,所述方法还包括:
获取待通过所述浏览器进行播放的封装音频码流;
调用所述Wasm模块解析所述封装音频码流,得到所述封装音频码流中的编码音频数据;
对所述编码音频数据进行解码,得到原始音频数据;
渲染所述原始音频数据,得到音频信号;
播放所述音频信号。
在一种可能的实施例中,所述原始音频数据为脉冲编码调制PCM数据,所述方法还包括:
将所述原始音频数据存储于预设的PCM链表;
所述渲染所述原始音频数据,得到音频信号,包括:
从所述PCM链表中提取PCM数据;
渲染提取到的PCM数据,得到音频信号。
在一种可能的实施例中,所述对所述编码音频数据进行解码,得到原始音频数据,包括:
调用所述Wasm模块对所述编码音频数据进行解码,得到原始音频数据;或者,
调用所述硬件解码器提供的接口,将所述编码音频数据输入至所述硬件解码器中进行硬解码,得到原始音频数据。
根据本申请的第二方面,还提供了一种浏览器,所述浏览器包括主线程模块、硬解模块和网页装配Wasm模块;
所述主线程模块,用于获取待通过浏览器进行播放的封装视频码流;
所述Wasm模块,用于解析所述封装视频码流,得到所述封装视频码流中的编码视频数据;
所述硬解模块,用于调用所述硬件解码器提供的接口,将所述编码视频数据输入至所述硬件解码器中进行硬解码,得到原始视频数据;渲染所述原始视频数据,得到视频画面;展示所述视频画面。
在一种可能的实施例中,所述硬解模块调用所述硬件解码器提供的接口,将所述视频帧数据输入至所述硬件解码器中进行硬解码,得到原始视频数据,包括:
调用所述硬件解码器提供的接口,将所述视频数据输入至由主线程或后台进程运行的所述硬件解码器进行硬解码,得到原始视频数据,所述后台进程为独立于用于运行所述浏览器的主线程的线程。
在一种可能的实施例中,所述硬解模块渲染所述原始视频数据,得到视频画面,包括:
通过所述主线程或所述后台进程调用所述浏览器提供的接口渲染所述原始视频数据,得到视频画面。
在一种可能的实施例中,所述原始视频数据为位图数据,所述硬解模块,还用于将所述原始视频数据存储于预设的位图链表;
所述硬解模块渲染所述原始视频数据,得到视频画面,包括:
从所述位图链表中提取位图数据;
渲染提取到的位图数据,得到视频画面。
在一种可能的实施例中,所述硬解模块渲染所述原始视频数据,得到视频画面,包括:
通过所述主线程或所述后台进程调用所述浏览器提供的接口渲染所述原始视频数据,得到视频画面。
在一种可能的实施例中,所述硬解模块调用所述硬件解码器提供的接口,将所述视频数据输入至由主线程或后台进程运行的所述硬件解码器进行硬解码,得到原始视频数据,包括:
调用所述硬件解码器提供的接口,通过传递消息PostMessage方式将所述视频数据输入至由主线程或后台进程运行的所述硬件解码器进行硬解码,得到原始视频数据。
在一种可能的实施例中,所述Wasm模块解析所述封装视频码流,得到所述封装视频码流中的编码视频数据,包括:
调用所述Wasm模块中的解复用DEMUX模块解析所述封装视频码流,得到视频裸数据;将所述视频裸数据作为所述封装视频码流中的编码视频数据存储于预设的裸数据链表。
在一种可能的实施例中,所述主线程模块,还用于获取待通过所述浏览器进行播放的封装音频码流;
所述Wasm模块,还用于解析所述封装音频码流,得到所述封装音频码流中的编码音频数据;对所述编码音频数据进行解码,得到原始音频数据;渲染所述原始音频数据,得到音频信号;播放所述音频信号。
在一种可能的实施例中,所述原始音频数据为脉冲编码调制PCM数据,所述Wasm模块,还用于将所述原始音频数据存储于预设的PCM链表;
所述Wasm模块渲染所述原始音频数据,得到音频信号,包括:
从所述PCM链表中提取PCM数据;
渲染提取到的PCM数据,得到音频信号。
在一种可能的实施例中,所述主线程模块,还用于获取待通过所述浏览器进行播放的封装音频码流;
所述Wasm模块,还用于解析所述封装音频码流,得到所述封装音频码流中的编码音频数据;
所述硬解模块,还用于调用所述硬件解码器提供的接口,将所述编码音频数据输入至所述硬件解码器中进行硬解码,得到原始音频数据;渲染所述原始音频数据,得到音频信号;播放所述音频信号。
根据本申请的第三方面,还提供了一种电子设备,包括:
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述第一方面任一所述的方法。
根据本申请的第四方面,还提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面任一所述的方法。
本申请实施例有益效果:
本申请实施例提供的多媒体播放方法、浏览器及电子设备,可以利用Wasm模块对封装视频码流进行解析,并通过硬件解码器提供的接口,将解析得到的编码视频数据输入至硬件解码器,以使得硬件解码器能够对已经解封装的编码视频数据进行解码,从而得到原始视频数据,并通过渲染展示视频画面。由于Wasm模块是基于高级编程语言开发得到的,因此相比于硬件原生方法,能够实现更多的解析方法,因此可以解析多种不同封装的封装视频码流,而硬件解码器仅需对编码视频数据进行解码,无需关心视频码流的封装格式,因此本申请提供的多媒体播放方法能够适用于多种不同封装的封装视频码流,即有效提高了兼容性。同时,由于本申请提供的多媒体播放方法中是通过硬件解码器进行解码,因此能够有效降低解码所需的运算量,从而有效降低视频播放所需占用的系统资源。即本申请提供的多媒体播放方法在提高兼容性的同时降低播放视频占用的系统资源。
当然,实施本申请的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。
图1a为本申请提供的多媒体播放方法的一种应用场景示意图;
图1b为本申请提供的浏览器提供的一种视频播放方法的示意图;
图1c为本申请提供的浏览器提供的另一种视频播放方法的示意图;
图2为本申请提供的多媒体播放方法的一种流程示意图;
图3为本申请提供的浏览器的一种系统框架示意图;
图4为本申请提供的电子设备的一种结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员基于本申请所获得的所有其他实施例,都属于本申请保护的范围。
为了更清楚的对本申请提供的多媒体播放方法进行说明,下面将对本申请提供的多媒体播放方法的一种可能的应用场景进行示例性说明,可以理解的是,以下示例仅是本申请提供的多媒体播放方法的一种可能的应用场景,在其他可能的实施例中,本申请提供的多媒体播放方法也可以应用于其他可能的应用场景中,以下示例对此不作任何限制。
如图1a所示,用户通过浏览器远程访问一图像采集设备,以观看该图像采集设备采集到的视频,该图像采集设备用于采集特定区域的图像,并对图像进行人体检测,以确定出图像中存在的人体。图像采集设备对采集到的原始视频数据进行编码,得到编码视频数据,并将编码视频数据和对原始视频数据进行人体检测的检测结果封装在一起,得到封装视频码流,并将封装视频码流发送至浏览器。对应的,浏览器在视频播放时需要依次进行解封装(下文称解析)、解码以及渲染。
浏览器提供有如下两种视频播放方式:
方式一:
如图1b所示,浏览器将封装视频码流输入至HTML5(Hyper Text Markup Language5,超文本标记语言5)提供的Video标签,通过Video标签对封装视频码流进行解析,得到编码视频数据,并通过Video标签对编码视频数据进行解码,得到原始视频数据,并通过Video标签对原始视频数据进行渲染,从而在浏览器中展示出视频画面。
方式二:
如图1c所示,开发人员预先使用C、C++或其他高级编程语言开发得到一个具备视频播放功能的功能模块,并使用Emscripten(一种编译工具)将该功能模块编译为网页装配(WebAssembly,简称Wasm)模块,并将该Wasm模块集成于浏览器内。浏览器将封装视频码流输入至Wasm模块,通过Wasm模块对封装视频码流进行解析,得到编码视频数据,并通过Wasm模块对编码视频数据进行解码,得到原始视频数据,并通过Wasm模块对原始视频数据进行渲染,从而在浏览器中展示出视频画面。
对于方式一,由于Video标签是基于硬件原生方法实现视频播放的,因此仅能够从封装视频码流中解析出硬件支持的信息,如一些格式的编码视频数据,而不能够从封装视频码流中解析出硬件不支持的信息,如另一些格式的编码视频数据以及前述检测结果。导致仅有部分封装视频码流能够成功地通过方式一播放,且无法成功获取并展示检测结果,即方式一的兼容性较差,且不支持展示检测结果。
对于方式二:由于Wasm模块使用软解,即不完全基于硬件原生方法实现视频播放,因此还需要调用CPU实现部分运算,导致所需消耗的系统资源较多。
基于此,本申请提供了一种多媒体播放方法,应用于任意具备多媒体播放功能的电子设备,包括但不限于电脑、手机、平板等。本申请提供的多媒体播放方法如图2所示,包括:
S201,获取待通过浏览器进行播放的封装视频码流。
其中,浏览器中集成有硬件解码器和Wasm模块。
S202,调用Wasm模块解析封装视频码流,得到封装视频码流中的编码视频数据。
S203,调用硬件解码器提供的接口,将编码视频数据输入至硬件解码器中进行硬解码,得到原始视频数据。
S204,渲染原始视频数据,得到视频画面。
S205,展示视频画面。
选用该实施例,利用Wasm模块对封装视频码流进行解析,并通过硬件解码器提供的接口,将解析得到的编码视频数据输入至硬件解码器,以使得硬件解码器能够对已经解封装的编码视频数据进行解码,从而得到原始视频数据,并通过渲染展示视频画面。由于Wasm模块是基于高级编程语言开发得到的,因此相比于硬件原生方法,能够实现更多的解析方法,因此可以解析多种不同封装的封装视频码流,而硬件解码器仅需对编码视频数据进行解码,无需关心视频码流的封装格式,因此本申请提供的多媒体播放方法能够适用于多种不同封装的封装视频码流,即有效提高了兼容性。同时,由于本申请提供的多媒体播放方法中是通过硬件解码器进行解码,因此能够有效降低解码所需的运算量,从而有效降低视频播放所需占用的系统资源。即本申请提供的多媒体播放方法在提高兼容性的同时降低播放视频占用的系统资源。
下面将分别对前述S201-S205进行说明:
其中,在S201中,根据浏览器的不同可以集成有不同的硬件解码器,本文中的硬件解码器是指支持硬解码的解码器。Wasm模块应当至少具备从封装视频码流中解析得到编码视频数据的功能,并且对于封装视频码流中还包括图像采集设备(如网络摄像机、手机等)或图像存储设备(如网络视频录像机、硬盘录像机等)基于视频数据进行处理(如目标检测、添加离屏信息等)形成的数据(下文中称私有数据),如前述检测结果的应用场景,Wasm模块也可以具备从封装视频码流中解析得到私有数据的功能。
在S202中,Wasm模块解析封装视频码流至少得到编码视频数据,还可以根据Wasm模块支持的私有协议从封装视频码流中解析得到私有数据,如前述检测结果,从而能够解决上述方式一中无法展示检测结果的问题。根据实际需求,Wasm可以支持不同封装格式的封装视频码流,但是应当尽可能使得Wasm支持所有常见的封装格式,如PS(ProgramStream,节目流)、RTP(Real-time Transport Protocol,实时传输协议)、FLV(FlashVideo,一种流媒体视频格式)、MP4(一种音视频信息的压缩编码标准)、HIK(一种封装格式)等。
在S203中,硬件解码器提供的接口为能够直接调用浏览器中已经存在的媒体组件和编解码器的接口,以Chrome(一种浏览器名称)浏览器为例,该接口为WebCodecsAPI。通过该接口能够将视频数据输入至硬件解码器,以通过硬件解码器进行硬解码得到原始视频数据。
原始视频数据的数据格式根据应用场景的不同可以不同,示例性的,在一种可能的实施例中,原始视频数据为矢量图数据,在另一种可能的实施例中,原始视频数据为位图数据。对于原始视频数据为位图数据的情况,可以将解码得到的原始视频数据存储于预设的位图链表中。后续渲染原始视频数据时,可以从位图链表中提取位图数据,并渲染提取到的位图数据,得到视频画面。
位图链表为链表,链表中包括多个表项,每个表项中用于存储数据且存储有指向下一个表项的指针,以位图链表为例,位图链表中每个表项用于存储位图数据,并且存储有指向下一个表项的指针。
在向位图链表中存储位图数据时,位图数据存储于当前写入表项中,并将当前表项中指针所指向的表项作为新的当前写入表项。当前写入表项初始时为初始位图表项,初始位图表项可以是位图链表中的任意表项,但是为充分利用存储空间,初始位图表项应当尽可能接近位图链表中第一个表项。
在从位图链表中读取位图数据时,从位图链表中读取当前读取表项中存储的位图数据,并将当前存储表项中指针所指向的表项作为新的当前存储表项。当前存储表项初始时为初始位图表项。
并且,为避免用于渲染原始视频数据的渲染器一次读取过多的位图数据,导致因缓存位图数据占用过多的缓存,渲染器可以每间隔预设时长从位图链表中读取一个位图数据,预设时长取决于视频码流的帧率,示例性的,假设视频码流的帧率为20帧/秒,即每50ms播放一个视频帧,则预设时长应不长于50ms,且尽可能接近50ms。
可以理解的是,硬件解码器为集成于浏览器中的解码器,可以通过浏览器的主线程运行解码器以解码得到原始视频数据,但是若通过浏览器的主线程运行硬件解码器,则主线程可能由于运行硬件解码器导致未能及时响应用户操作,即造成浏览器用户界面卡顿。示例性的,用户在通过浏览器观看视频的同时点击浏览器的工具栏按钮以展开工具栏,由于主线程正在运行硬件解码器,因此主线程未能够及时响应用户的点击操作,造成浏览器需要经过较长时间才展开工具栏。
基于此,在一种可能的实施例中,调用硬件解码器提供的接口,将视频数据输入至由后台进程运行的硬件解码器进行硬解码,得到原始视频数据。由后台进程运行硬件解码器进行硬解码,能够避免因主线程运行硬件解码器导致的用户界面卡顿,提高了浏览器的响应速率。
后台进程为任意独立于主线程、且能够运行硬件解码器的线程,示例性的,后台进程为WebWorker进程,WebWorker进程通过PostMessage(一种用于传递消息的函数)与主线程进行交互,在一种可能的实施例中,WebWorker进程完成对编码视频数据的解码后,将解码得到的原始视频数据通过PostMessage发送至主线程进行渲染。
在另一种可能的实施例中,WebWorker进程完成对编码视频数据的解码后,通过调用浏览器提供的接口对解码得到的原始视频数据进行渲染,并将渲染得到的视频画面通过PostMessage发送至主线程进行展示。
选用该实施例,解码和渲染都由后台进程实现,能够进一步降低主线程所需执行的计算量,从而进一步提高浏览器的响应率。
在S204中,如前述S203的说明,可以是由后台进程进行渲染,也可以是由主线程进行渲染。
在S205可以仅1展示视频画面,还可以同时展示视频画面和视频画面以外的其他信息,如前述检测结果。
为了更清楚的对本申请提供的多媒体播放方法进行说明,下面将结合浏览器的系统框架进行示例性说明,参见图3,图3所示为本申请提供的浏览器的一种系统框架示意图,包括:Web层和Wasm层,web层中包括主线程模块和WebWorker模块,Wasm层包括Wasm模块。
其中,主线程模块用于用户界面进行信息交互,接收设备发送的视频数据,并对各模块进行管理。Wasm模块中包括Demux(解复用)模块、Decoder(解码器)模块以及Render(渲染器)模块。
Demux模块用于对封装音视频码流进行解析,以从封装音视频码流中解析得到编码视频数据、编码音频数据和私有数据,Decoder模块用于对编码音频数据进行解码,得到原始音频数据,Render模块用于对原始音频数据进行渲染,得到音频信号。
WebWorker模块中包括硬件解码器(视频硬解码)和硬解显示模块,其中,硬件解码器用于对编码视频数据进行硬解码,得到原始视频数据,硬解显示模块用于对原始视频数据进行渲染,得到视频画面。
该示例中,视频播放流程为:
步骤一:主线程模块获取待播放的封装视频码流,即实现前述S201的步骤。
步骤二:主线程通过和Wasm模块之间的交互,将封装视频码流发送至Wasm模块。
步骤三:Wasm模块通过Demux模块对封装视频码流进行解析,得到视频裸数据,其中视频裸数据相当于前述编码视频数据,该步骤即实现前述S202的步骤,Wasm模块通过PostMessage消息传递方式将编码视频数据发送至WebWorker模块。
步骤四:WebWorker模块使用WebCodecs调用硬件解码器对视频裸数据进行硬解码,得到原始视频数据,即实现前述S203的步骤。
步骤五,WebWorker模块通过硬解显示模块调用浏览器的接口对原始视频数据进行渲染,得到视频画面,并展示该视频画面,即实现前述S204和S205的步骤。
其中,视频裸数据作为封装视频码流被存储于预设的裸数据链表。裸数据链表为链表,其格式与前述位图链表相同,区别仅在于裸数据链表中各表项存储的数据为视频裸数据,而位图链表中各表项存储的数据为位图数据。
在向裸数据链表中存储裸数据数据时,裸数据数据存储于当前写入表项中,并将当前表项中指针所指向的表项作为新的当前写入表项。当前写入表项初始时为初始裸数据表项,初始裸数据表项可以是裸数据链表中的任意表项,但是为充分利用存储空间,初始裸数据表项应当尽可能接近裸数据链表中第一个表项。
在从裸数据链表中读取裸数据数据时,从裸数据链表中读取当前读取表项中存储的裸数据数据,并将当前存储表项中指针所指向的表项作为新的当前存储表项。当前存储表项初始时为初始裸数据表项。
并且,为避免用于解码裸视频数据的硬件解码器一次读取过多的裸视频数据,导致因缓存裸视频数据占用过多的缓存,硬件解码器可以每间隔预设时长从裸视频链表中回调一个裸视频数据,预设时长取决于硬件解码器单位时间内解码的裸视频数据数量,示例性的,假设视频码流每秒解码20个裸视频数据,即每50ms解码一个音频帧,则预设时长应不长于50ms且尽可能接近50ms。
并且图3所示的系统框架不仅能够实现视频播放,还能够实现音频播放,音频播放的流程为:
步骤六:主线程模块获取待播放的封装音频码流。
步骤七:主线程通过和Wasm模块之间的交互,将封装音频码流发送至Wasm模块。
步骤八:Wasm模块通过Demux模块对封装音频码流进行解析,得到音频裸数据(下文称编码音频数据),
步骤九:Wasm模块通过Decoder模块对编码音频数据进行解码,得到原始音频数据。
步骤十:Wasm模块通过Render模块对编码音频数据进行渲染,得到音频信号并播放该音频信号。
其中,原始音频数据可以是PCM(Pulse Code Modulation,脉冲编码调制)数据,可以将解码得到的原始视频数据存储于预设的PCM链表中。后续渲染原始音频数据时,可以从PCM链表中提取PCM数据,并渲染提取到的PCM数据,得到音频信号。
PCM链表为链表,其格式与前述位图链表相同,区别仅在于PCM链表中各表项存储的数据为PCM数据,而位图链表中各表项存储的数据为位图数据。
在向PCM链表中存储PCM数据时,PCM数据存储于当前写入表项中,并将当前表项中指针所指向的表项作为新的当前写入表项。当前写入表项初始时为初始PCM表项,初始PCM表项可以是PCM链表中的任意表项,但是为充分利用存储空间,初始PCM表项应当尽可能接近PCM链表中第一个表项。
在从PCM链表中读取PCM数据时,从PCM链表中读取当前读取表项中存储的PCM数据,并将当前存储表项中指针所指向的表项作为新的当前存储表项。当前存储表项初始时为初始PCM表项。
并且,为避免用于渲染原始音频数据的渲染器一次读取过多的PCM数据,导致因缓存PCM数据占用过多的缓存,渲染器可以每间隔预设时长从PCM链表中读取一个PCM数据,预设时长取决于音频码流的帧率,示例性的,假设视频码流的帧率为20帧/秒,即每50ms播放一个音频帧,则预设时长应不长于50ms,且尽可能接近50ms。
可以理解的是,步骤六-步骤十仅是本申请提供的一种音频播放方法,在其他可能的实施例中,也可以是由Webworker模块负责对音频数据进行解码和渲染,即在步骤八后,Wasm模块通过PostMeggage消息传递方式将编码音频数据发送至WebWorker模块,由WebWorker模块对编码音频数据进行解码,得到原始音频数据,并由WebWorker模块对原始音频数据进行渲染,得到音频信号并播放。
对应于本申请提供的多媒体播放方法,本申请还提供了一种浏览器,包括:
主线程模块、硬解模块和网页装配Wasm模块;
所述主线程模块,用于获取待通过浏览器进行播放的封装视频码流;
所述Wasm模块,用于解析所述封装视频码流,得到所述封装视频码流中的编码视频数据;
所述硬解模块,用于调用所述硬件解码器提供的接口,将所述编码视频数据输入至所述硬件解码器中进行硬解码,得到原始视频数据;渲染所述原始视频数据,得到视频画面;展示所述视频画面。
在一种可能的实施例中,所述硬解模块渲染所述原始视频数据,得到视频画面,包括:
通过所述主线程或所述后台进程调用所述浏览器提供的接口渲染所述原始视频数据,得到视频画面。
在一种可能的实施例中,所述原始视频数据为位图数据,所述硬解模块,还用于将所述原始视频数据存储于预设的位图链表;
所述硬解模块渲染所述原始视频数据,得到视频画面,包括:
从所述位图链表中提取位图数据;
渲染提取到的位图数据,得到视频画面。
在一种可能的实施例中,所述硬解模块渲染所述原始视频数据,得到视频画面,包括:
通过所述主线程或所述后台进程调用所述浏览器提供的接口渲染所述原始视频数据,得到视频画面。
在一种可能的实施例中,所述硬解模块调用所述硬件解码器提供的接口,将所述视频数据输入至由主线程或后台进程运行的所述硬件解码器进行硬解码,得到原始视频数据,包括:
调用所述硬件解码器提供的接口,通过传递消息PostMessage方式将所述视频数据输入至由主线程或后台进程运行的所述硬件解码器进行硬解码,得到原始视频数据。
在一种可能的实施例中,所述Wasm模块解析所述封装视频码流,得到所述封装视频码流中的编码视频数据,包括:
调用所述Wasm模块中的解复用DEMUX模块解析所述封装视频码流,得到视频裸数据;将所述视频裸数据作为所述封装视频码流中的编码视频数据存储于预设的裸数据链表。
在一种可能的实施例中,所述主线程模块,还用于获取待通过所述浏览器进行播放的封装音频码流;
所述Wasm模块,还用于解析所述封装音频码流,得到所述封装音频码流中的编码音频数据;对所述编码音频数据进行解码,得到原始音频数据;渲染所述原始音频数据,得到音频信号;播放所述音频信号。
在一种可能的实施例中,所述原始音频数据为脉冲编码调制PCM数据,所述Wasm模块,还用于将所述原始音频数据存储于预设的PCM链表;
所述Wasm模块渲染所述原始音频数据,得到音频信号,包括:
从所述PCM链表中提取PCM数据;
渲染提取到的PCM数据,得到音频信号。
在一种可能的实施例中,所述主线程模块,还用于获取待通过所述浏览器进行播放的封装音频码流;
所述Wasm模块,还用于解析所述封装音频码流,得到所述封装音频码流中的编码音频数据;
所述硬解模块,还用于调用所述硬件解码器提供的接口,将所述编码音频数据输入至所述硬件解码器中进行硬解码,得到原始音频数据;渲染所述原始音频数据,得到音频信号;播放所述音频信号。
本申请实施例还提供了一种电子设备,如图4所示,包括:
存储器401,用于存放计算机程序;
处理器402,用于执行存储器401上所存放的程序时,实现如下步骤:
获取待通过浏览器进行播放的封装视频码流,其中,所述浏览器中集成有硬件解码器和网页装配Wasm模块;
调用所述Wasm模块解析所述封装视频码流,得到所述封装视频码流中的编码视频数据;
调用所述硬件解码器提供的接口,将所述编码视频数据输入至所述硬件解码器中进行硬解码,得到原始视频数据;
渲染所述原始视频数据,得到视频画面;
展示所述视频画面。
并且上述电子设备还可以包括通信总线和/或通信接口,处理器402、通信接口、存储器401通过通信总线完成相互间的通信。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本申请提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一多媒体播放方法的步骤。
在本申请提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一多媒体播放方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、还可以是固态硬盘Solid StateDisk(SSD)等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的较佳实施例,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。

Claims (10)

1.一种多媒体播放方法,其特征在于,所述方法包括:
获取待通过浏览器进行播放的封装视频码流,其中,所述浏览器中集成有硬件解码器和网页装配Wasm模块;
调用所述Wasm模块解析所述封装视频码流,得到所述封装视频码流中的编码视频数据;
调用所述硬件解码器提供的接口,将所述编码视频数据输入至所述硬件解码器中进行硬解码,得到原始视频数据;
渲染所述原始视频数据,得到视频画面;
展示所述视频画面。
2.根据权利要求1所述的方法,其特征在于,所述调用所述硬件解码器提供的接口,将所述视频帧数据输入至所述硬件解码器中进行硬解码,得到原始视频数据,包括:
调用所述硬件解码器提供的接口,将所述视频数据输入至由主线程或后台进程运行的所述硬件解码器进行硬解码,得到原始视频数据,所述后台进程为独立于用于运行所述浏览器的主线程的线程。
3.根据权利要求2所述的方法,其特征在于,所述渲染所述原始视频数据,得到视频画面,包括:
通过所述主线程或所述后台进程调用所述浏览器提供的接口渲染所述原始视频数据,得到视频画面。
4.根据权利要求2所述的方法,其特征在于,所述原始视频数据为位图数据,所述方法还包括:
将所述原始视频数据存储于预设的位图链表;
所述渲染所述原始视频数据,得到视频画面,包括:
从所述位图链表中提取位图数据;
渲染提取到的位图数据,得到视频画面。
5.根据权利要求2-4任一所述的方法,其特征在于,所述调用所述硬件解码器提供的接口,将所述视频数据输入至由主线程或后台进程运行的所述硬件解码器进行硬解码,得到原始视频数据,包括:
调用所述硬件解码器提供的接口,通过传递消息PostMessage方式将所述视频数据输入至由主线程或后台进程运行的所述硬件解码器进行硬解码,得到原始视频数据。
6.根据权利要求1所述的方法,其特征在于,所述调用所述Wasm模块解析所述封装视频码流,得到所述封装视频码流中的编码视频数据,包括:
调用所述Wasm模块中的解复用DEMUX模块解析所述封装视频码流,得到视频裸数据;
将所述视频裸数据作为所述封装视频码流中的编码视频数据存储于预设的裸数据链表。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取待通过所述浏览器进行播放的封装音频码流;
调用所述Wasm模块解析所述封装音频码流,得到所述封装音频码流中的编码音频数据;
对所述编码音频数据进行解码,得到原始音频数据;
渲染所述原始音频数据,得到音频信号;
播放所述音频信号。
8.根据权利要求7所述的方法,其特征在于,所述原始音频数据为脉冲编码调制PCM数据,所述方法还包括:
将所述原始音频数据存储于预设的PCM链表;
所述渲染所述原始音频数据,得到音频信号,包括:
从所述PCM链表中提取PCM数据;
渲染提取到的PCM数据,得到音频信号。
9.根据权利要求6所述的方法,其特征在于,所述对所述编码音频数据进行解码,得到原始音频数据,包括:
调用所述Wasm模块对所述编码音频数据进行解码,得到原始音频数据;或者,
调用所述硬件解码器提供的接口,将所述编码音频数据输入至所述硬件解码器中进行硬解码,得到原始音频数据。
10.一种浏览器,其特征在于,所述浏览器包括主线程模块、硬解模块和网页装配Wasm模块;
所述主线程模块,用于获取待通过浏览器进行播放的封装视频码流;
所述Wasm模块,用于解析所述封装视频码流,得到所述封装视频码流中的编码视频数据;
所述硬解模块,用于调用所述硬件解码器提供的接口,将所述编码视频数据输入至所述硬件解码器中进行硬解码,得到原始视频数据;渲染所述原始视频数据,得到视频画面;展示所述视频画面。
CN202211708270.9A 2022-12-29 2022-12-29 一种多媒体播放方法、浏览器及电子设备 Pending CN116132735A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202211708270.9A CN116132735A (zh) 2022-12-29 2022-12-29 一种多媒体播放方法、浏览器及电子设备
PCT/CN2023/103992 WO2024139129A1 (zh) 2022-12-29 2023-06-29 一种多媒体播放方法、浏览器及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211708270.9A CN116132735A (zh) 2022-12-29 2022-12-29 一种多媒体播放方法、浏览器及电子设备

Publications (1)

Publication Number Publication Date
CN116132735A true CN116132735A (zh) 2023-05-16

Family

ID=86303930

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211708270.9A Pending CN116132735A (zh) 2022-12-29 2022-12-29 一种多媒体播放方法、浏览器及电子设备

Country Status (2)

Country Link
CN (1) CN116132735A (zh)
WO (1) WO2024139129A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117692681A (zh) * 2023-12-21 2024-03-12 广州开得联智能科技有限公司 视频流播放方法、装置、设备及可读存储介质
WO2024139129A1 (zh) * 2022-12-29 2024-07-04 杭州海康威视数字技术股份有限公司 一种多媒体播放方法、浏览器及电子设备

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110142121A1 (en) * 2009-12-11 2011-06-16 Hayden John R Reusable and extensible framework for multimedia application development
CN105187733B (zh) * 2014-06-06 2019-03-01 腾讯科技(北京)有限公司 视频处理方法、装置及终端
CN110868625A (zh) * 2019-11-22 2020-03-06 北京金山云网络技术有限公司 一种视频播放方法、装置、电子设备及存储介质
CN111641838A (zh) * 2020-05-13 2020-09-08 深圳市商汤科技有限公司 一种浏览器视频播放方法、装置以及计算机存储介质
CN113556579B (zh) * 2021-06-07 2022-08-19 武汉众智数字技术有限公司 一种基于HTML5的web无插件播放安防实时视频的方法
CN114339382A (zh) * 2021-12-24 2022-04-12 深圳市商汤科技有限公司 视频播放方法、装置、设备及计算机存储介质
CN116132735A (zh) * 2022-12-29 2023-05-16 杭州海康威视数字技术股份有限公司 一种多媒体播放方法、浏览器及电子设备

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024139129A1 (zh) * 2022-12-29 2024-07-04 杭州海康威视数字技术股份有限公司 一种多媒体播放方法、浏览器及电子设备
CN117692681A (zh) * 2023-12-21 2024-03-12 广州开得联智能科技有限公司 视频流播放方法、装置、设备及可读存储介质

Also Published As

Publication number Publication date
WO2024139129A1 (zh) 2024-07-04

Similar Documents

Publication Publication Date Title
CN109257646B (zh) 视频处理方法、装置、电子设备及计算机可读介质
CN116132735A (zh) 一种多媒体播放方法、浏览器及电子设备
KR102130429B1 (ko) 멀티미디어 수신 장치에서 디코딩을 수행하는 방법 및 멀티미디어 장치
CN110446114B (zh) 多媒体数据的处理装置、方法、电子设备及存储介质
CN112770188B (zh) 一种视频播放方法及装置
WO2017206626A1 (zh) 网络资源访问设备、混合设备及方法
US20140325323A1 (en) Online video playing method and apparatus and computer readable medium
WO2018133800A1 (zh) 视频画面处理方法、装置、电子设备及存储介质
CN112261377B (zh) web版监控视频播放方法、电子设备及存储介质
CN102693238B (zh) Widget应用方法、系统及多媒体终端
CN112954431A (zh) 视频播放方法、装置、视频播放设备及可读存储介质
CN113055681A (zh) 视频解码显示方法,装置,电子设备及存储介质
CN114302176B (zh) 视频播放方法及装置
CN113761871A (zh) 富文本渲染方法、装置、电子设备以及存储介质
US11902341B2 (en) Presenting links during an online presentation
KR20080006492A (ko) LASeR 콘텐츠 표시 장치 및 방법
CN104156421A (zh) 页面的展现方法、装置及系统
CN111523065A (zh) 富文本数据处理方法、装置、电子设备及计算机存储介质
CN108600813A (zh) 一种媒体文件播放方法、装置以及媒体播放系统
CN115809056B (zh) 组件复用实现方法、装置和终端设备、可读存储介质
CN114422468A (zh) 消息处理方法、装置、终端及存储介质
CN110618811B (zh) 信息呈现方法和装置
CN112738562B (zh) 浏览器页面透明显示的方法、装置和计算机存储介质
CN113127785A (zh) 字幕处理方法、装置、计算机设备及存储介质
CN113641327A (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