CN114051161B - 网页的视频播放方法及装置 - Google Patents

网页的视频播放方法及装置 Download PDF

Info

Publication number
CN114051161B
CN114051161B CN202111320096.6A CN202111320096A CN114051161B CN 114051161 B CN114051161 B CN 114051161B CN 202111320096 A CN202111320096 A CN 202111320096A CN 114051161 B CN114051161 B CN 114051161B
Authority
CN
China
Prior art keywords
video
program
address
data buffer
multimedia library
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.)
Active
Application number
CN202111320096.6A
Other languages
English (en)
Other versions
CN114051161A (zh
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202111320096.6A priority Critical patent/CN114051161B/zh
Publication of CN114051161A publication Critical patent/CN114051161A/zh
Application granted granted Critical
Publication of CN114051161B publication Critical patent/CN114051161B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/433Content storage operation, e.g. storage operation in response to a pause request, caching operations
    • H04N21/4331Caching operations, e.g. of an advertisement for later insertion during playback
    • 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
    • H04N21/440218Processing 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 by transcoding between formats or standards, e.g. from MPEG-2 to MPEG-4
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/60Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client 
    • H04N21/63Control signaling related to video distribution between client, server and network components; Network processes for video distribution between server and clients or between remote clients, e.g. transmitting basic layer and enhancement layers over different transmission paths, setting up a peer-to-peer communication via Internet between remote STB's; Communication protocols; Addressing
    • H04N21/64Addressing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/858Linking data to content, e.g. by linking an URL to a video object, by creating a hotspot

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本申请提供了一种网页的视频播放方法及装置;方法包括:脚本程序接收网页传入的第一视频地址,将第一视频地址转换为能够被多媒体库程序识别的第二视频地址,并通过桥接程序将第二视频地址发送给多媒体库程序;多媒体库程序经由桥接程序向脚本程序发送携带第二视频地址的网络请求,以使脚本程序将网络请求中的第二视频地址逆转换为第一视频地址,并向服务器发送地址逆转换后的网络请求,将服务器返回的视频流存储至桥接程序的数据缓冲区;多媒体库程序从数据缓冲区读取视频流并播放视频流。通过本申请,能够使得多媒体库程序连续的播放多个不同视频格式的视频,显著提高多媒体库程序播放网页视频的普适性和连续性。

Description

网页的视频播放方法及装置
技术领域
本申请涉及互联网技术领域,尤其涉及一种网页的视频播放方法及装置。
背景技术
互联网特别是移动互联网的快速发展,各种网页视频的播放需求也在与日俱增。
相关技术在播放网页视频的过程中,通常仅能通过多媒体库程序播放单个视频文件,且无法正常播放一些特殊视频格式的文件。这样,导致相关技术中的多媒体库程序无法连续的播放多个不同格式的视频,因此,相关技术中通过多媒体程序播放网页视频时,对于播放不同格式的视频无法达到普遍适用性的要求,且切换播放不同格式的视频时无法保证连续性。
对于如何提高多媒体库程序播放网页视频的普适性和连续性,相关技术尚无有效解决方案。
发明内容
本申请实施例提供一种网页的视频播放方法、装置及计算机可读存储介质,能够使得多媒体库程序能够连续的播放多个不同视频格式的视频,显著提高多媒体库程序播放网页视频的普适性和连续性。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种网页的视频播放方法,包括:
所述脚本程序接收网页传入的第一视频地址,将所述第一视频地址转换为能够被所述多媒体库程序识别的第二视频地址,并通过所述桥接程序将所述第二视频地址发送给所述多媒体库程序;
所述多媒体库程序经由所述桥接程序向所述脚本程序发送携带所述第二视频地址的网络请求,以使
所述脚本程序将所述网络请求中的所述第二视频地址逆转换为所述第一视频地址,并向服务器发送地址逆转换后的所述网络请求,将所述服务器返回的视频流存储至所述桥接程序的数据缓冲区;
所述多媒体库程序从所述数据缓冲区读取所述视频流并播放所述视频流。
本申请实施例提供一种网页的视频播放装置,包括:
转换模块,用于所述脚本程序接收网页传入的第一视频地址,转换为能够被所述多媒体库程序识别的第二视频地址,并通过所述桥接程序将所述第二视频地址发送给所述多媒体库程序;
发送模块,用于所述多媒体库程序经由所述桥接程序向所述脚本程序发送携带所述第二视频地址的网络请求;
逆转换模型,用于所述脚本程序将所述网络请求中的所述第二视频地址逆转换为所述第一视频地址;
存储模块,用于向服务器发送地址逆转换后的所述网络请求,将所述服务器返回的视频流存储至所述桥接程序的数据缓冲区;
读取播放模块,用于多媒体库程序从所述数据缓冲区读取所述视频流并播放所述视频流。
上述方案中,所述存储模块,还用于针对每个所述视频片段执行以下处理:所述脚本程序接收所述服务器返回的所述视频片段,并将所述视频片段存储至所述脚本程序的视频片段数组中;所述桥接程序读取所述视频片段数组中的视频片段,并将读取的所述视频片段存储至所述桥接程序的数据缓冲区;其中,在所述脚本程序的视频片段数组中,已读取的所述视频片段被标记已读取片段。
上述方案中,所述存储模块,还用于当所述视频片段数组中的所述未读取视频片段的数量大于未读取数量阈值时,所述桥接程序读取所述视频片段数组中的所述未读取视频片段;所述桥接程序将读取的所述未读取视频片段存储至所述桥接程序的数据缓冲区中;其中,已读取的所述未读取视频片段被标记为已读取视频片段。
上述方案中,所述读取播放模块,还用于响应于针对所述视频流的视频播放操作,所述多媒体库程序调用所述多媒体库程序中的读取接口,其中,所述读取接口包括所述多媒体库程序中的读取全局函数;所述多媒体库程序中的读取接口调用所述桥接程序中的读取函数,以使所述桥接程序中的读取函数从所述数据缓冲区中依次读取所述视频片段,并向所述多媒体库程序发送从所述数据缓冲区中依次读取的所述视频片段。
上述方案中,所述读取播放模块,还用于针对所述数据缓冲区中的首个视频片段执行以下处理:所述桥接程序中的所述读取函数从所述数据缓冲区中读取所述首个视频片段;将读取指针的指向位置由所述首个视频片段的起始地址调整为所述首个视频片段的终止地址;其中,所述读取指针用于定位当前读取的所述视频片段在所述视频流中的位置;所述桥接程序向所述多媒体库程序发送从所述数据缓冲区中读取的所述首个视频片段。
上述方案中,所述网页的视频播放装置还包括:确定模块,用于获取在所述数据缓冲区中存储的所述视频流的起始地址;将所述视频流的起始地址作为所述首个视频片段的起始地址;根据所述视频片段的长度和所述首个视频片段的起始地址,确定所述首个视频片段的终止地址,其中,所述数据缓冲区中的每个所述视频片段的长度相同;根据所述首个视频片段的起始地址和所述首个视频片段的终止地址,确定所述首个视频片段。
上述方案中,所述转换模块,用于对所述第一视频地址进行解析处理,得到所述第一视频地址的协议名称;对所述第一视频地址的协议名称进行转换处理,得到能够被所述多媒体库程序识别的协议名称;将所述第一视频地址中的协议名称替换为所述能够被所述多媒体库程序识别的协议名称,得到所述能够被所述多媒体库程序识别的第二视频地址。
上述方案中,所述逆转换模块,用于所述脚本程序对所述网络请求中的所述第二视频地址的协议名称进行逆转换处理,得到所述第一视频地址;所述脚本程序将所述网络请求中的所述第二视频地址替换为所述第一视频地址,得到携带所述第一视频地址的所述网络请求;所述脚本程序将所述携带所述第一视频地址的所述网络请求作为所述地址逆转换后的所述网络请求;所述脚本程序向所述服务器发送所述地址逆转换后的所述网络请求。
上述方案中,所述网页的视频播放装置还包括:跳转模块,用于响应于针对所述视频流的视频跳转操作,调用所述多媒体库程序中的跳转接口,并确定所述视频跳转操作对应的跳转点,其中,所述跳转接口包括所述多媒体库程序中的跳转全局函数;所述多媒体库程序中的跳转接口调用所述桥接程序中的跳转函数,以使所述桥接程序中的跳转函数将播放所述视频流的播放时刻从当前播放时刻跳转至所述跳转点。
上述方案中,所述跳转模块,还用于当所述跳转点对应的播放时刻在所述数据缓冲区中时,所述桥接程序中的跳转函数将播放所述视频流的播放时刻,从所述当前播放时刻跳转至所述数据缓冲区中与所述跳转点对应的播放时刻;当所述跳转点对应的播放时刻不在所述数据缓冲区中时,所述桥接程序向所述脚本程序发送获取请求;所述脚本程序接收并转发所述获取请求至所述服务器,以从所述服务器获取包括跳转点对应的播放时刻的所述视频流,并将所述服务器后续返回的视频流存储至所述桥接程序的数据缓冲区中;所述桥接程序中的跳转函数将播放所述视频流的播放时刻,从所述当前播放时刻跳转至所述数据缓冲区中与所述跳转点对应的播放时刻。
本申请实施例提供一种网页的视频播放装置,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的网页的视频播放方法。
本申请实施例提供一种电子设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的网页的视频播放方法。
本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本申请实施例提供的网页的视频播放方法。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例上述的网页的视频播放方法。
本申请实施例具有以下有益效果:
通过多媒体库程序、脚本程序和桥接程序之间的地址传递和视频流传递,从而在播放多个不同视频格式的视频的过程中,有效保证了地址传递和视频流传递过程中的连续性,从而使得多媒体库程序能够连续的播放多个不同视频格式的视频,显著提高多媒体库程序播放网页视频的普适性和连续性。
附图说明
图1A-图1B是本申请实施例提供的网页的视频播放系统架构的结构示意图;
图2是本申请实施例提供的网页的视频播放装置的结构示意图;
图3A-图3D是本申请实施例提供的网页的视频播放方法的流程示意图;
图4A-图4C是本申请实施例提供的网页的视频播放方法的原理示意图;
图5A-图5F是本申请实施例提供的网页的视频播放方法的原理示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)多媒体库程序(Fast Forward Mpeg,Ffmpeg):又称多媒体视频处理程序,多媒体库程序是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,多媒体库程序具有视频采集功能,视频格式转换功能等等。多媒体库程序支持全面的视频格式编码、解码、播放。
2)脚本程序(JavaScript,JS):是一种具有函数优先的轻量级、解释型或即时编译型的程序语言。脚本程序是使用特定的描述性语言,依据一定的格式编写的可执行文件。脚本程序又被称为扩建的程序,或者是动态程序,是一种编程语言,用来控制软件应用程序,脚本程序通常是以二进制文本的形式进行保存,只是在被调用时进行解释或者编译。
3)桥接程序(Bridging):桥接程序用于连接多媒体库程序和脚本程序,为多媒体程序和脚本程序之间进行数据传送、信息交流提供服务的中转程序。
4)浏览器:又称网页浏览器,浏览器是用来检索、展示以及传递Web信息资源的应用程序。Web信息资源由统一资源标识符所标记,浏览器的使用者可以借助超级链接(Hyperlinks),通过浏览器浏览相互关联的信息。
5)数据缓冲区(Data Cache Area):数据缓冲区是用户前端用来存储、操纵数据的对象。数据缓冲区是设置于桥接程序中,用于存储视频流的存储结构。
6)视频流(Video Streaming):视频流是指视频数据的传输,例如,它能够被作为一个稳定的和连续的流通过网络处理。因为流动,客户机浏览器或插件能够在整个文件被传输完成前显示多媒体数据。
在本申请实施例的实施过程中,申请人发现相关技术存在以下问题:
在一些实施例中,图5B是本申请实施例提供的网页的视频播放的原理示意图。参见图5B,在相关技术中,当播放hls协议的视频时(参见图5B,hls.C),首先需要对视频文件进行语法分析(参见图5B,parse_playlist),得到新的分析结果列表(参见图5B,new_playList),然后将分析结果列表中的每个元素分别执行以下指令:ffio_init_context。然后将绑定了hls.c文件中的读取数据(read_data)回调到pb指针(pls->pb),并将AVIDContext文件中的读取包(r ead_package)回调。此时,mpegts中的format已经无法传入io回调。然后继续将结果输出(avformat_open_input)至mpegts.c文件。
由此可知,上述相关技术中最大问题是只能播放单个文件,因为回调函数中只有写入数据的指针和写入的大小,而没有写入的文件名,对于hls、dash等协议的视频无法正常播放,导致上述相关技术方案无法达到普适性要求,在上述相关方案中,视频播放过程中有大量的文件请求产生。因此必须在回调函数中要知道Ffmpeg需要读取哪个文件。基于此,本申请实施例提供的网页的视频播放方法可以通过自定义协议的方式解决上述相关技术存在的问题。
相关技术在播放网页视频的过程中,通常仅能通过多媒体库程序播放单个视频文件,且无法正常播放一些特殊视频格式的文件。这样,导致相关技术中的多媒体库程序无法连续的播放多个不同格式的视频,因此,相关技术中通过多媒体程序播放网页视频时,对于播放不同的格式视频无法达到普遍适用性的要求,且切换播放不同格式的视频时无法保证连续性。
对于如何提高多媒体库程序播放网页视频的普适性和连续性,相关技术尚无有效解决方案。
本申请实施例提供一种网页的视频播放方法、装置、电子设备、计算机可读存储介质和计算机程序产品,能够连续的播放多个不同视频格式的视频,显著提高多媒体库程序播放网页视频的普适性和连续性。下面说明本申请实施例提供的网页的视频播放设备的示例性应用,本申请实施例提供的设备可以实施为笔记本电脑,平板电脑,台式计算机,机顶盒,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备)、智能语音交互设备、智能家电、车载终端等各种类型的终端设备。
参见图1A,图1A是本申请实施例提供的网页的视频播放系统100的一个可选的架构示意图,为实现网页的视频播放的应用场景(例如,网页的视频播放的应用场景可以是网页浏览器中的网页视频播放,比如网页内容以网页视频的形式展示在网页浏览器中),终端(示例性示出了终端400)通过网络300连接服务器200,网络300可以是广域网或者局域网,又或者是二者的组合。
终端400用于供用户使用客户端410,在图形界面410-1(示例性示出了图形界面410-1)显示。终端400和服务器200通过有线或者无线网络相互连接。
在一些实施例中,服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端400可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表、智能语音交互设备、智能家电、车载终端等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例中不做限制。
在一些实施例中,终端400中的脚本程序接收网页传入的视频地址,经过多媒体库程序、桥接程序和脚本程序处理后,终端400中的脚本程序向服务器200发送网络请求,服务器200接收到网络请求后,向终端400发送视频流,终端400中的脚本程序接收到视频流之后,在桥接程序中存储视频流,并通过多媒体库程序读取视频流和在图形界面410-1播放视频流。
在一些实施例中,服务器200可以是多个服务器构成的服务器集群或者分布式系统,以分布式系统为区块链系统为例,其中多个服务器可组成为一区块链网络,而服务器200为区块链网络上的节点。
下面,以多个终端接入区块链网络以实现视频流的播放为例说明区块链网络的示例性应用。
在一些实施例中,参见图1B,图1B是本申请实施例提供的网页的视频播放系统100的一个可选的架构示意图。网页的视频播放涉及的多个用户通过终端浏览网页视频,如终端500和终端600,在获得区块链管理平台800的授权后,终端500的客户端510、以及终端600的客户端610都可以接入区块链网络700。
终端500的观众在客户端510的图形界面510-1中观看网页视频,终端500发送视频流获取请求至区块链管理平台800(终端600的观众在客户端610的图形界面610-1中观看网页视频,终端600发送视频流获取请求至区块链管理平台800),由区块链管理平台800根据视频流获取请求生成对应的更新操作,在更新操作中指定了实现更新操作/查询操作需要调用的智能合约、以及向智能合约传递的参数,交易还携带了网页签署的数字签名,并将更新操作到区块链网络700。
区块链网络700中的节点210-1、节点210-2、节点210-3在接收到更新操作时,对更新操作的数字签名进行验证,数字签名验证成功后,根据更新操作中携带的客户端510的身份,确认客户端510是否是具有获取权限,数字签名和权限验证中的任何一个验证判断都将导致获取失败。验证成功后签署节点210自己的数字签名(例如,使用节点210-1的私钥对交易的摘要进行加密得到),并继续在区块链网络700中广播。
区块链网络700中具有排序功能的节点210-1、节点210-2、节点210-3等,接收到验证成功的获取后,将获取填充到新的区块中,并广播到区块链网络700中提供共识服务的节点。
区块链网络700中的提供共识服务的节点对新区块进行共识过程以达成一致,提供账本功能的节点将新区块追加到区块链的尾部,并执行新区块中的获取请求:对于提交更新视频流的获取请求,更新状态数据库中视频流对应的键值对;对于查询视频流的获取请求,从状态数据库中查询视频流对应的键值对,并返回视频流。
参见图2,图2是本申请实施例提供的网页的视频播放终端400的结构示意图,图2所示的终端400包括:至少一个处理器410、存储器450、至少一个网络接口420和用户接口430。终端400中的各个组件通过总线系统440耦合在一起。可理解,总线系统440用于实现这些组件之间的连接通信。总线系统440除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统440。
处理器410可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口430包括使得能够呈现媒体内容的一个或多个输出装置431,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口430还包括一个或多个输入装置432,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器450可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器450可选地包括在物理位置上远离处理器410的一个或多个存储设备。
存储器450包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器450旨在包括任意适合类型的存储器。
在一些实施例中,存储器450能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统451,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块452,用于经由一个或多个(有线或无线)网络接口420到达其他计算设备,示例性的网络接口420包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等;
呈现模块453,用于经由一个或多个与用户接口430相关联的输出装置431(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
输入处理模块454,用于对一个或多个来自一个或多个输入装置432之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本申请实施例提供的网页的视频播放装置可以采用软件方式实现,图2示出了存储在存储器450中的网页的视频播放装置455,其可以是程序和插件等形式的软件,包括以下软件模块:转换模块4551、发送模块4552、逆转换模块4553、存储模块4554、读取播放模块4555,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
在另一些实施例中,本申请实施例提供的网页的视频播放装置可以采用硬件方式实现,作为示例,本申请实施例提供的网页的视频播放装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的网页的视频播放方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application SpecificIntegrated Circuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。
在一些实施例中,终端可以通过运行计算机程序来实现本申请实施例提供的网页的视频播放方法。举例来说,计算机程序可以是操作系统中的原生程序或软件模块;可以是本地(Native)应用程序(APP,Application),即需要在操作系统中安装才能运行的程序,如直播APP或者即时通信APP;也可以是小程序,即只需要下载到浏览器环境中就可以运行的程序;还可以是能够嵌入至任意APP中的小程序。总而言之,上述计算机程序可以是任意形式的应用程序、模块或插件。
将结合本申请实施例提供的终端的示例性应用和实施,说明本申请实施例提供的网页的视频播放方法。
本申请实施例提供的网页的视频播放方法,参见图5F,图5F本申请实施例提供的网页的视频播放方法的原理示意图,在网页浏览器中,通过多媒体库程序、桥接程序和脚本程序之间的自定义协议交互,完成地址传递和视频流缓存读取。其中,网页浏览器中的脚本程序通过浏览器能力加载网络数据;网页浏览器中的桥接程序通过桥接程序的具体接口实现桥接功能;网页浏览器中的多媒体库程序用于实现抽象的全局接口。
参见图3A,图3A是本申请实施例提供的网页的视频播放方法的流程示意图,将结合图3A示出的步骤101至步骤105进行说明。
在步骤101中,脚本程序接收网页传入的第一视频地址,将第一视频地址转换为能够被多媒体库程序识别的第二视频地址,并通过桥接程序将第二视频地址发送给多媒体库程序。
在一些实施例中,脚本程序是一种具有函数优先的轻量级、解释型或即时编译型的程序语言,脚本程序是使用特定的描述性语言,依据一定的格式编写的可执行文件。脚本程序又被称为扩建的程序,或者是动态程序,是一种编程语言,用来控制软件应用程序,脚本通常是以二进制文本的形式进行保存,只是在被调用时进行解释或者编译。多媒体库程序是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,多媒体库程序具有视频采集功能,视频格式转换功能等等。多媒体库程序支持全面的视频格式编码、解码、播放。
在一些实施例中,为了便于在网页中查找视频内容,网页中的每个视频内容均设置有视频地址,例如,视频地址的格式如下:
<协议名称>:||<服务器类型>.<域名>/<目录>/<文件名>(1)
其中,“||”之前的部分表示协议名称,例如,常见的协议名称有www协议(http)、文件传输协议(ftp)、远程传输协议(telnet)、新闻组协议(news)、用户计算机中的文件(file)等。域名、目录和文件名之间用“/”分隔。
作为示例,参见图4B,图4B是本申请实施例提供的网页的视频播放方法的原理示意图,例如,网页传入脚本程序的第一视频地址为“http://xxx.mp4”,脚本程序接收网页传入的第一视频地址“http://xxx.mp4”,将第一视频地址“http://xxx.mp4”转换为能够被多媒体库程序识别的第二视频地址“httpjs://xxx.mp4”,并通过桥接程序将第二视频地址发送给多媒体库程序。
如此,通过将第一视频地址转换为第二视频地址,并通过桥接程序将第二视频地址发送至多媒体库程序,从而使得多媒体库程序能够识别到网页传入的相应地址,便于多媒体库程序进一步获取相应的视频数据。
在一些实施例中,参见图3B,图3B是本申请实施例提供的网页的视频播放方法的流程示意图,图3B示出的步骤101可以通过步骤1011至步骤1013实现,下面分别进行说明。
在步骤1011中,对第一视频地址进行解析处理,得到第一视频地址的协议名称。
作为示例,当第一视频地址为“http://xxx.mp4”时,对第一视频地址进行解析处理,得到第一视频地址的协议名称http。可以理解的是,对视频地址进行解析处理的过程可以是对视频地址的格式(<协议名称>:||<服务器类型>.<域名>/<目录>/<文件名>)进行解析,分别得到视频地址的协议名称、服务器类型、域名、目录、文件名的过程。
在步骤1012中,对第一视频地址的协议名称进行转换处理,得到能够被多媒体库程序识别的协议名称。
作为示例,对第一视频地址的协议名称http进行转换处理,得到能够被多媒体库程序识别的协议名称httpjs。
在步骤1013中,将第一视频地址中的协议名称替换为能够被多媒体库程序识别的协议名称,得到能够被多媒体库程序识别的第二视频地址。
作为示例,将第一视频地址“http://xxx.mp4”中的协议名称http替换为能够被多媒体库程序识别的协议名称httpjs,得到能够被多媒体库程序识别的第二视频地址“httpjs://xxx.mp4”。
如此,通过将第一视频地址转换为第二视频地址,并通过桥接程序将第二视频地址发送至多媒体库程序,从而使得多媒体库程序能够识别到网页传入的相应地址,便于多媒体库程序进一步获取相应的视频数据。
在步骤102中,多媒体库程序经由桥接程序向脚本程序发送携带第二视频地址的网络请求。
在一些实施例中,桥接程序用于连接多媒体库程序和脚本程序,为多媒体程序和脚本程序之间进行数据传送、信息交流的中转程序。
作为示例,参见图4A,从步骤401至步骤402,多媒体库程序(多媒体库程序中的url_open接口)经由桥接程序(httpjsOpen函数)向脚本程序(fetchLoder.Start[])发送携带第二视频地址的网络请求。
在步骤103中,脚本程序将网络请求中的第二视频地址逆转换为第一视频地址,并向服务器发送地址逆转换后的网络请求。
作为示例,参见图4B,脚本程序将网络请求中的第二视频地址“httpjs://xxx.mp4”逆转换为第一视频地址“http://xxx.mp4”。
在一些实施例中,参见图3B,图3B是本申请实施例提供的网页的视频播放方法的流程示意图,图3B示出的步骤103可以通过步骤1031至步骤1034实现,下面分别进行说明。
在步骤1031中,脚本程序对网络请求中的第二视频地址的协议名称进行逆转换处理,得到第一视频地址。
作为示例,参见图4B,脚本程序对网络请求中的第二视频地址的协议名称httpjs进行逆转换处理,得到第一视频地址的协议名称http,将第二视频地址“httpjs://xxx.mp4”中的协议名称httpjs替换为第一视频地址的协议名称http,得到第一视频地址“http://xxx.mp4”。逆转换处理是转换处理的逆过程。
在步骤1032中,脚本程序将网络请求中的第二视频地址替换为第一视频地址,得到携带第一视频地址的网络请求。
作为示例,脚本程序将网络请求中的第二视频地址“httpjs://xxx.mp4”替换为第一视频地址“http://xxx.mp4”,得到携带第一视频地址“http://xxx.mp4”的网络请求。
在步骤1033中,脚本程序将携带第一视频地址的网络请求作为地址逆转换后的网络请求。
作为示例,脚本程序将携带第一视频地址“http://xxx.mp4”的网络请求作为地址逆转换后的网络请求。
在步骤1034中,脚本程序向服务器发送地址逆转换后的网络请求。
作为示例,脚本程序向服务器发送地址逆转换后的网络请求,即,脚本程序向服务器发送携带第一视频地址“http://xxx.mp4”的网络请求。
如此,由于脚本程序和多媒体库程序所能够识别的视频地址不同,通过对脚本程序所能识别的视频地址(即第一视频地址)和多媒体库程序所能识别的视频地址(即第二视频地址)进行互相转换,从而有效确保了视频地址在脚本程序和多媒体库程序中均能有效识别,同时并在网络请求中对其所携带的视频地址进行更新替换,从而保证了通过网络请求能够从服务器中准确的获取到相应的视频数据。
在步骤104中,将服务器返回的视频流存储至桥接程序的数据缓冲区。
作为示例,参见图4A,从步骤403至步骤405,脚本程序向服务器发送地址逆转换后的网络请求,将服务器返回的视频流存储至桥接程序的数据缓冲区(BufferChunk)中。
在一些实施例中,视频流包括多个视频片段,例如,视频流包括两个视频片段、三个视频片段等等。其中,视频流是指视频数据的传输流,例如,视频流能够被作为一个稳定的和连续的数据流进行网络处理。因为视频流的流动性,客户端浏览器或插件能够在整个文件被传输完成前显示视频数据。视频片段包括一段时间内的数据集合。
在一些实施例中,参见图3C,图3C是本申请实施例提供的网页的视频播放方法的流程示意图,图3C示出的步骤104可以通过步骤1041至步骤1042实现对每个视频片段进行处理,下面分别进行说明。
在步骤1041中,脚本程序接收服务器返回的视频片段,并将视频片段存储至脚本程序的视频片段数组中。
作为示例,参见图4A,在步骤403中,脚本程序接收服务器返回的视频片段,并将视频片段存储至脚本程序的视频片段数组(bufferChunks[])中。其中,脚本程序的视频片段数组用于存储视频片段。
在步骤1042中,桥接程序读取视频片段数组中的视频片段,并将读取的视频片段存储至桥接程序的数据缓冲区;其中,在脚本程序的视频片段数组中,已读取的视频片段被标记已读取片段。
在一些实施例中,在脚本程序的视频片段数组中,除已读取视频片段以外的视频片段被标记为未读取视频片段。
作为示例,参见图4A,从步骤404至步骤405,桥接程序读取(writeBuffer)视频片段数组中的视频片段,并将读取的视频片段存储至桥接程序的数据缓冲区中。其中,将读取的视频片段存储至桥接程序的数据缓冲区的方式可以是通过malloc(memory allocation)函数实现的,malloc函数用于申请一块连续的指定大小的内存块区域,并以相应类型返回分配的内存区域地址。
如此,通过将服务器返回的视频片段预先存储至脚本程序的视频片段数组中,再通过桥接程序读取视频片段数组中的视频片段,并将读取的视频片段存储至桥接程序的数据缓冲区中,从而通过视频片段数组的中间过渡存储,保证了视频流在传输过程中的数据稳定性。而且,在视频片段数组中,通过将已读取的视频片段标记已读取片段,将除已读取视频片段以外的视频片段标记为未读取视频片段,从而更加便于对视频片段数组中存储的视频片段进行有效管理。
在一些实施例中,在上述步骤1042中桥接程序可以通过以下方式读取视频片段数组中的视频片段:当视频片段数组中的未读取视频片段的数量大于未读取数量阈值时,桥接程序读取视频片段数组中的未读取视频片段。
作为示例,当视频片段数组中的未读取视频片段的数量为5个时,未读取数量阈值设置为8,此时,视频片段数组中的未读取视频片段的数量小于未读取数量阈值,桥接程序暂停读取视频片段数组中的未读取视频片段。当视频片段数组中的未读取视频片段的数量为10个时,此时,视频片段数组中的未读取视频片段的数量大于未读取数量阈值,桥接程序读取视频片段数组中的未读取视频片段。
如此,通过对视频片段数组中的未读取视频片段的数量进行判断是否大于未读取数量阈值,从而控制读取视频片段数组中的视频片段的读取进程,从而更有利于调配读取进程,有效加强了视频片段数组中视频片段的读取效率。
在一些实施例中,在上述步骤1042中可以通过以下方式将读取的视频片段存储至桥接程序的数据缓冲区:桥接程序将读取的未读取视频片段存储至桥接程序的数据缓冲区中;其中,已读取的未读取视频片段被标记为已读取视频片段。
作为示例,参见图4A,从步骤404至步骤405,桥接程序将读取的未读取视频片段存储至桥接程序的数据缓冲区中,与此同时,已读取的未读取视频片段被标记为已读取视频片段。
在步骤105中,多媒体库程序从数据缓冲区读取视频流并播放视频流。
作为示例,参见图4A,从步骤406至步骤407,多媒体库程序从数据缓冲区读取(参见图4A,url_read,读取接口)视频流并播放视频流。即,多媒体库程序从数据缓冲区中读取视频流之后在显示界面播放视频流。
在一些实施例中,参见图3C,图3C是本申请实施例提供的网页的视频播放方法的流程示意图,图3C示出的步骤105可以通过步骤1051至步骤1053实现,下面分别进行说明。
在步骤1051中,多媒体库程序响应于针对视频流的视频播放操作,多媒体库程序调用多媒体库程序中的读取接口,其中,读取接口包括多媒体库程序中的读取全局函数。
作为示例,参见图4A,在步骤406中,多媒体库程序响应于针对视频流的视频播放操作,多媒体库程序调用多媒体库程序中的读取接口(url_read),其中,读取接口包括多媒体库程序中的读取全局函数(read)。其中,读取全局函数用于读取视频流数据。
在步骤1052中,多媒体库程序中的读取接口调用桥接程序中的读取函数。
作为示例,参见图4A,从步骤406至步骤407,多媒体库程序中的读取接口调用桥接程序中的读取函数(httpjsRead),从而便于通过桥接程序中的读取函数读取相应的视频数据。
在步骤1053中,桥接程序中的读取函数从数据缓冲区中依次读取视频片段,并向多媒体库程序发送从数据缓冲区中依次读取的视频片段。
作为示例,参见图4A,从步骤406至步骤407,桥接程序中的读取函数从数据缓冲区中依次读取视频片段,并向多媒体库程序发送从数据缓冲区中依次读取的视频片段。
在一些实施例中,在上述步骤1053中,桥接程序中的读取函数从数据缓冲区中依次读取视频片段的过程可以通过以下方式实现:针对数据缓冲区中的除首个视频片段以外的其他视频片段执行以下处理:桥接程序中的读取函数从数据缓冲区中读取当前视频片段;将读取指针的指向位置由当前视频片段的起始地址调整为当前视频片段的终止地址;其中,读取指针用于定位当前读取的视频片段在视频流中的位置。
作为示例,参见图4C,图4C是本申请实施例提供的网页的视频播放方法的原理示意图,针对数据缓冲区中的首个视频片段(例如,参见图4C,数据缓冲区中的consumed视频片段(已读取视频片段),其中,consumed视频片段既是图4C中所示的数据缓冲区中的首个视频片段,也是已读取视频片段)执行以下处理:桥接程序中的读取函数从数据缓冲区中读取首个视频片段(即图4C中所示的consumed视频片段),将读取指针(图4C中所示的offsetOnChunk指针)的指向位置由首个视频片段的起始地址(图4C中所示的chunkOffsetOnFile所在的位置)调整为首个视频片段的终止地址(图4C中所示的offsetOnChunk指针的位置),其中,读取指针(offsetOnChunk指针)用于定位当前读取的视频片段在视频流中的位置。数据缓冲区中还包括未读取视频片段(to be read视频片段),数据缓冲区中的视频流长度为未读取视频片段的长度和已读取视频片段的长度之和。在脚本程序的视频片段数组中的存储空间分为已下载存储空间(loaded)和待下载存储空间(tobe load),在已下载存储空间中,存储着视频片段(chunk)。
在一些实施例中,在上述步骤1053中,桥接程序中的读取函数从数据缓冲区中依次读取视频片段的过程可以通过以下方式实现:针对数据缓冲区中的首个视频片段执行以下处理:桥接程序中的读取函数从数据缓冲区中读取首个视频片段;将读取指针的指向位置由首个视频片段的起始地址调整为首个视频片段的终止地址;其中,读取指针用于定位当前读取的视频片段在视频流中的位置。
如此,通过读取指针定位当前读取的视频片段在视频流中的位置,可以使得读取视频流中的视频片段时,能够及时定位到当前读取的视频片段在视频流中的具体位置,有效提高了读取视频片段的读取效率。
在一些实施例中,在上述步骤1053中,向多媒体库程序发送从数据缓冲区中依次读取的视频片段可以通过以下方式实现:桥接程序向多媒体库程序发送从数据缓冲区中读取的首个视频片段。
在一些实施例中,上述首个视频片段可以通过以下方式确定:获取在数据缓冲区中存储的视频流的起始地址;将视频流的起始地址作为首个视频片段的起始地址;根据视频片段的长度和首个视频片段的起始地址,确定首个视频片段的终止地址,其中,数据缓冲区中的每个视频片段的长度相同;根据首个视频片段的起始地址和首个视频片段的终止地址,确定首个视频片段。
作为示例,参见图4C,桥接程序获取在数据缓冲区中存储的视频流的起始地址(即图4C中chunkOffsetOnFile所在的位置),将视频流的起始地址作为首个视频片段的起始地址,也即首个视频片段的起始地址为chunkOffsetOnFile所在的位置。根据视频片段的长度和首个视频片段的起始地址,确定首个视频片段的终止地址,例如,视频片段的长度为10,首个视频片段的起始地址为0,则所确定的首个视频片段的终止地址为10。根据首个视频片段的起始地址和首个视频片段的终止地址,确定首个视频片段。例如,首个视频片段的起始地址为0,首个视频片段的终止地址为10,则所确定的首个视频片段为从首个视频片段的起始地址至首个视频片段的终止地址所在的存储空间中的视频片段。
如此,通过确定出数据缓冲区中的视频流中的首个视频片段,从而在后续读取的过程中,按照首个视频片段的读取方式,依次进行后续视频片段的读取,从而有效提高了视频片段的读取效率。
在一些实施例中,参见图3D,图3D是本申请实施例提供的网页的视频播放方法的流程示意图,在上述步骤105中多媒体库程序从数据缓冲区读取视频流之后,通过执行步骤106至步骤108实现视频播放进度的跳转。
在步骤106中,响应于针对视频流的视频跳转操作,调用多媒体库程序中的跳转接口,并确定视频跳转操作对应的跳转点,其中,跳转接口包括多媒体库程序中的跳转全局函数。
作为示例,针对视频流的跳转操作,可以是针对人机交互界面的单击操作、双击操作、点击相应控件操作等等。当接收到针对视频流的视频跳转操作(当跳转操作是滑动进度条)时,响应于针对视频流的滑动进度条操作,调用多媒体库程序中的跳转接口,确定视频跳转操作对应的操作点(即滑动进度条的终止位置对应的操作点)。
在一些实施例中,跳转全局函数是抽象的全局函数,跳转函数通过调用桥接程序和脚本程序来实现相应的跳转功能。
作为示例,参见图4A,多媒体库程序响应于针对视频流的视频跳转操作,调用多媒体库程序中的跳转接口(url_seek),并确定视频跳转操作对应的跳转点。
在步骤107中,多媒体库程序中的跳转接口调用桥接程序中的跳转函数。
作为示例,参见图4A,在步骤408中,多媒体库程序中的跳转接口调用桥接程序中的跳转函数(httpjsseek)。其中,桥接程序中的跳转函数是与多媒体库程序中的跳转全局函数对应的,具体执行跳转全局函数的逻辑功能的函数。
在步骤108中,桥接程序中的跳转函数将播放视频流的播放时刻从当前播放时刻跳转至跳转点。
作为示例,参见图4A,从步骤408至步骤411,桥接程序中的跳转函数将播放视频流的播放时刻从当前播放时刻跳转至跳转点,即桥接程序中的跳转函数将播放视频流的播放时刻从当前的播放时刻跳转至跳转点对应的播放时刻。可以理解的是,在播放视频流的过程中,当前时刻正在播放的视频流对应上述当前播放时刻,若需要跳转至某一其他播放时刻,则可以通过桥接程序中的跳转函数将播放视频流的播放时刻从当前播放时刻跳转至跳转点,从而从跳转点所在时刻处继续播放视频。
在一些实施例中,在上述步骤108中,将播放视频流的播放时刻从当前播放时刻跳转至跳转点可以通过以下方式实现:当跳转点对应的播放时刻在数据缓冲区中时,桥接程序中的跳转函数将播放视频流的播放时刻,从当前播放时刻跳转至数据缓冲区中与跳转点对应的播放时刻;当跳转点对应的播放时刻不在数据缓冲区中时,桥接程序向脚本程序发送获取请求;脚本程序接收并转发获取请求至服务器,以从服务器获取包括跳转点对应的播放时刻的视频流,并将服务器后续返回的视频流存储至桥接程序的数据缓冲区中;桥接程序中的跳转函数将播放视频流的播放时刻,从当前播放时刻跳转至数据缓冲区中与跳转点对应的播放时刻。
作为示例,参见图4A,从步骤408至步骤411,判断跳转点对应的播放时刻是否在数据缓冲区中,当跳转点对应的播放时刻在数据缓冲区中时(参见图4A,Y判断逻辑),桥接程序中的跳转函数将播放视频流的播放时刻,从当前播放时刻跳转至数据缓冲区中与跳转点对应的播放时刻(adjust offset);当跳转点对应的播放时刻不在数据缓冲区中时(参见图4A,N判断逻辑),桥接程序向脚本程序发送获取请求,脚本程序接收并转发获取请求至服务器,以从服务器获取包括跳转点对应的播放时刻的视频流,先将包括跳转点对应的播放时刻的视频流存储至视频片段数组中,再将服务器后续返回的视频流存储至桥接程序的数据缓冲区中,然后桥接程序中的跳转函数将播放视频流的播放时刻,从当前播放时刻跳转至数据缓冲区中与跳转点对应的播放时刻。
如此,通过判断跳转点对应的播放时刻是否在数据缓冲区中,从而有效确保了能够从当前播放时刻跳转至跳转点对应的播放时刻,保证了跳转后播放视频流的连贯性,有效提高了多媒体库程序播放网页视频的连续性。
在一些实施例中,参见图4A,在多媒体库程序从数据缓冲区读取视频流之后,通过执行步骤412至步骤413实现视频播放的关闭或暂停:多媒体库程序中的关闭接口(url_close)调用桥接程序中的关闭函数(httpjsClose)。桥接程序中的关闭函数将播放中的视频流暂停或停止播放,同时暂停脚本程序从服务器获取视频流(fetchLoder.abort[])。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。
本申请实施例可以具有如下应用场景,例如,多媒体库程序播放一些特殊格式的视频时,例如,播放基于HTTP的自适应码率流媒体传输(hls,HTTP Live Streaming)协议的视频等时,切换不同格式的视频时需要保证视频播放的连续性,通过本申请实施例提供的网页的视频播放方法,可以使得在播放hls协议的视频的过程中,切换其他格式的视频,保证视频播放的连续性和流畅性。
在一些实施例中,图5A是本申请实施例提供的网页的视频播放的原理示意图。参见图5A,在图5A中所示出的相关技术中,首先定义了ic指针,其具体代码为:AVFormatContext*ic=NULL;ic=avformat alloc context()。然后申请自定义的上下文函数(AVIOContext),其具体代码为:unsigned char*iobuffer-(unsigned char*)av_malloc(32768);AVIOContext"avio=avio_alloc context(iobuffer,32768,0,NULL,ioread packet,NULL,NULL)。然后将AVFormatContext的pb指向自定义上下文,其具体实现代码为:ic->pb=avio;并将AVFormatContext携带自定义上下文传入avformatopen input函数,其具体实现代码为:int err=avformat_open_input(&ic,"nothing",NULL,NULL);最后通过custon-io函数读取数据,进行数据回调,其具体实现代码为:int io_read_packet(void*opaque,uint8 t*buf,int buf size){}。
参见图5A,在相关技术中,通常使用webassembly(WebAssembly是栈式虚拟机和字节码技术的新应用)结合Ffmpeg(Fast Forward Mpeg)(即上文所述的多媒体库程序)播放音视频的技术中,通常使用custem-io的方式来实现js(即上文所述的脚本程序)提供数据给Ffmpeg(即上文所述的多媒体库程序)。此方法是目前可见的相关技术中通过webassembly结合Ffmpeg实现播放器播放视频的方案。
在一些实施例中,自定义协议命名为“httpjs”和“httpsjs”名称,由于在Ffmpeg中,可能会检查文件协议为“http”或者“https”开头的文件,因此以http开头可以使得ffmepg(即上文所述的多媒体库程序)判断为是http协议,如果是http协议(is_http)则部分逻辑会按照网络协议来处理。而本申请实施例提供的自定义协议的实现即基于网络数据的请求。但是自定义协议的协议名称需要和Ffmpeg中原本的“http”和“https”协议名称区分开。这是由于Ffmpeg会解析视频地址的协议,并根据协议“路由”到对应的URLProtocol实现来进行处理,例如file://xxx.mp4则会路由到file.c的协议处理文件读取。那么引用方传入播放器的地址还是http://xxx.mp4形式的,那么就需要将视频文件“路由”到httpjs.c来处理。
在一些实施例中,参见图4B,引用方传入播放器的地址是http://xxx.mp4(即上文所述的第一视频地址),那么则需要将地址替换为httpjs://xxx.mp4(即上文所述的第二视频地址)传入Ffmpeg,这样才能让Ffmpeg识别为httpjs.c来处理。具体的,地址转换的代码如下所示:
url.replace(/^(https?)/,'$1js')(2)
其中,url.replace表示地址转换函数,“/^(https?)/”表示地址转换函数中待转换的地址,“'$1js'”表示地址转换函数中待转换的参数。
在httpjs.c文件中,能从URLContext文件的filename属性拿到传入的视频地址。因此需要在http_open,http_read等回调实现中,返回视频地址供js侧(即上文所述的脚本程序)识别当前处理的url。此时js(即上文所述的脚本程序)拿到的是httpjs://xxx.mp4开头的地址,因此需要做一次逆向转换(即上文所述的逆转换处理),其中,逆向转换的代码如下所示:
urlWithPrefix.replace(/^(https?)js/,'$1')(3)
其中,urlWithPrefix.replace表示逆向转换函数,“/^(https?)js/”表示逆向转换函数中待转换的地址,“'$1'”表示逆向转换函数中待转换的参数。
在一些实施例中,参见图5C,图5C是本申请实施例提供的网页的视频播放的原理示意图。自定义协议实现的整体模块划分,分成了三层来实现:第一层:js代码(即上文所述的脚本程序),用于通过浏览器能力加载网络数据。C++桥接代码(即上文所述的桥接程序),用于js代码具体的接口实现。Ffmpeg源码(即上文所述的多媒体库程序),用于通过httpjs.c文件实现抽象的全局接口。
在一些实施例中,参见图5C和图5D,首先介绍Ffmpeg源码(即上文所述的多媒体库程序)的实现原理。基于跨语言实现的原因,Ffmpeg整体为一个c语言项目。因此在Ffmpeg中的自定义协议代码实际上只是实现URLProtocol结构体的接口的一些空函数,具体实现在更上层的c++桥接层(即上文所述的桥接程序)和js代码(即上文所述的脚本程序)来实现。这里实现的URLProtocol结构体的接口有:
url_open接口,用于打开http请求;
url_read接口,用于读取网络数据;
url_seek接口,用于跳转播放进度;
url_close接口,用于关闭http请求。
为了减少回调函数的层层传递,在本申请实施例中,定义了httpjs.c中所有接口实现基本是调用全局函数,即每个接口都调用一个抽象的全局函数(即上文所述的全局函数),由c++桥接层和js代码来实现全局函数的具体逻辑。这些全局函数定义如下:
extern int extHttpjsOpen(char*filename,int flags);
extern int extHttpjsRead(char*filename,uint8_t*buf,int size);
extern int64_t extHttpjsSeek(char*filename,int64_t pos,int whence);
extern int extHttpjsClose(char*filename);
其中,extern用于置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义;int表示整型变量;extHttpjsRead表示读取函数;extHttpjsOpen表示开启函数;extHttpjsSeek表示跳转函数(即上文所述的跳转全局函数);extHttpjsClose表示关闭函数;*filename表示指向文件名的指针;int size表示文件大小。
下面以url_open接口实现为例,说明在Ffmpeg源码中的伪代码实现如下:
函数声明:声明整型变量extHttpjsOpen,函数extHttpjsOpen(名称,参数);
调用函数httpjsOpen,得到函数extHttpjsOpen的返回值;
将文件名命名为httpjs;
将extHttpjsOpen函数返回值回传至接口url_open;
下面,继续说明注册httpjs自定义协议,首先需要在protocols.c中增加自定义协议的枚举:
extern const URLProtocol ff_httpjs_protocol;
extern const URLProtocol ff_httpsjs_protocol;
其中,extern用于置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义;const表示限定一个变量不允许被改变,产生静态作用;ff_httpsjs_protocol表示自定义协议的枚举。
然后需要增加Makefile中自定义协议的编译产物
OBJS-$(CONFIG_HTTPJS_PROTOCOL) +=httpjs.o;
OBJS-$(CONFIG_HTTPSJS_PROTOCOL) +=httpjs.o;
为了将自定义协议导出到Ffmpeg静态库中,本申请实施例只需要在编译配置configure中增加如下参数,通过在编译配置configure中增加参数:
--enable-protocol=httpjs,从而将自定义协议导出到Ffmpeg静态库中。
在一些实施例中,参见图5C和图5D,再介绍c++桥接代码的实现(即上文所述的桥接程序)的实现原理。
c++桥接代码部分是自定义协议的具体实现过程,主要包括以下五个函数实现:
httpjsOpen函数,与Ffmpeg中url_open接口对应,用于打开网络请求;
httpjsRead函数,与Ffmpeg中url_read接口对应,用于读取视频数据;
httpjsSeek函数,与Ffmpeg中url_seek接口对应,用于跳转视频数据的读指针位置;
httpjsClose函数,与Ffmpeg中url_close接口对应,用于关闭网络请求;
writeBuffer函数,用于提供给js代码写入缓冲数据。
下面,参见图5D,下面,将介绍BufferChunk结构体的伪代码定义:
声明BufferChunk结构体;
声明文件名指针;
声明结构体数据的指针(js和c++里面是同一片内存);
结构体数据的指针在整个文件的偏移位置;
结构体数据的指针的数据长度;
当前在结构体读取的偏移值;
获取整个文件大小。
在一些实施例中,参见图4C,BufferChunk结构体在自定义协议实现中,相当于一个数据缓冲区。顶层的js代码(即上文所述脚本程序)获取到视频数据以后,也会写入此结构体的chunkData(结构体数据缓存区)中。而httpjsRead、httpjsSeek接口,都是读取BufferChunk结构体中的数据,同时读指针(offsetOnChunk)移动。整个数据窗口参见图4C所示。
综上,参见图5D,图5D所示出的是自定义协议的整体交互流程,首先由Ffmpeg发起调用,启动整个交互流程。
在步骤501和502中,当播放视频时,Ffmpeg首先会根据传入的url调用url_open接口,此接口会透传到js代码,由js代码发起fetch请求,此时打开了一个流式加载的网络请求。
在步骤503中,Fetch(获取)返回的数据为一片一片的小chunk(即上文所述的视频片段),因此将其存入一个数组中(bufferChunks)。当未被读取的数据达到一定阈值,例如1MB数据,本申请实施例通过调用c++桥接层writeBuffer接口写入一部分chunk数据。
在步骤504和步骤505中,c++桥接层接收到写入的chunk数据时,会创建一个新的BufferChunk结构体,等待被读取。
在步骤506和步骤507中,当Ffmpeg开始调用url_read接口时,则需要开始向Ffmpeg输入数据。此时从“读指针”的位置读取一定大小的二进制数据,并将二进制数据拷贝到Ffmpeg指定的指针中。
在步骤508和步骤509中,当在播放进度跳转等场景时,Ffmpeg开始调用url_seek接口,此时需要做判断,如果seek的位置在当前BufferChunk中,那么只需要移动offsetOnBuffer的位置就可以了。但是如果seek位置不在当前BufferChunk中,那么需要通知js层,重新从目标位置加载数据,并重新调用writeBuffer写入新的数据。
在步骤510和步骤511中,当在播放暂停场景下时,Ffmpeg开始调用url_close接口,通过调用c++桥接层中的httpjsClose函数实现播放暂停功能,同时js代码暂停从服务器获取视频流(fetchLoder.abort[])。
在一些实施例中,c++桥接层和js代码之间的通信过程具体如下。参见图5E,图5E是本申请实施例提供的网页的视频播放的原理示意图。作为webassembly应用。本申请实施例实现了跨语言调用。因此需要使用相关工具,例如,Emscripten编译套件,将c++代码编译成webassembly代码在浏览器运行。本申请实施例使用Emscripten编译套件来编译。其中主要的命令工具为emcc部分。C++代码首先通过Clang编译为LLVM字节码,通过LLVM字节码生成对应的中间代码,其中,中间代码表征任何可以生成IR语言,且可以编译成webassembly代码的一种代码形式。再通过LLVM字节码编译生成webassembly代码和js胶水代码。
而在自定义协议的c++协议层(即上文所述的桥接程序),本申请实施例通过使用Emscripten提供的工具函数来调用js代码(即上文所述的脚本程序)。以httpjsOpen函数为例进行说明:
通过MAIN_THREAD_ASYNC_EM_ASM工具函数直接调用js线程中的全局函数。
而在js线程中,定义如下接收函数:
self.httpjsOpenCallback=function(filenamePtr:number)
其中,self.httpjsOpenCallback表示接收函数的名称,function表示函数名称,filenamePtr:number表示function函数的具体参数。
通过本申请实施例提供的方案实现Ffmpeg的自定义协议httpjs,能使webassembly(WebAssembly是一种可以使用非JavaScript编程语言编写代码并且能在浏览器上运行的技术方案)的Ffmpeg应用播放诸如hls、dash等复杂的视频协议,达到更好的播放体验。
下面继续说明本申请实施例提供的网页的视频播放装置455的实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器450的网页的视频播放装置455中的软件模块可以包括:转换模块,用于所述脚本程序接收网页传入的第一视频地址,转换为能够被所述多媒体库程序识别的第二视频地址,并通过所述桥接程序将所述第二视频地址发送给所述多媒体库程序;发送模块,用于所述多媒体库程序经由所述桥接程序向所述脚本程序发送携带所述第二视频地址的网络请求;逆转换模型,用于所述脚本程序将所述网络请求中的所述第二视频地址逆转换为所述第一视频地址;存储模块,用于向服务器发送地址逆转换后的所述网络请求,将所述服务器返回的视频流存储至所述桥接程序的数据缓冲区;读取播放模块,用于多媒体库程序从所述数据缓冲区读取所述视频流并播放所述视频流。
在一些实施例中,上述存储模块,还用于针对每个所述视频片段执行以下处理:所述脚本程序接收所述服务器返回的所述视频片段,并将所述视频片段存储至所述脚本程序的视频片段数组中;所述桥接程序读取所述视频片段数组中的视频片段,并将读取的所述视频片段存储至所述桥接程序的数据缓冲区;其中,在所述脚本程序的视频片段数组中,已读取的所述视频片段被标记已读取片段。
在一些实施例中,上述存储模块,还用于当所述视频片段数组中的所述未读取视频片段的数量大于未读取数量阈值时,所述桥接程序读取所述视频片段数组中的所述未读取视频片段;所述桥接程序将读取的所述未读取视频片段存储至所述桥接程序的数据缓冲区中;其中,已读取的所述未读取视频片段被标记为已读取视频片段。
在一些实施例中,上述读取播放模块,还用于响应于针对所述视频流的视频播放操作,所述多媒体库程序调用所述多媒体库程序中的读取接口,其中,所述读取接口包括所述多媒体库程序中的读取全局函数;所述多媒体库程序中的读取接口调用所述桥接程序中的读取函数,以使所述桥接程序中的读取函数从所述数据缓冲区中依次读取所述视频片段,并向所述多媒体库程序发送从所述数据缓冲区中依次读取的所述视频片段。
在一些实施例中,上述读取播放模块,还用于针对所述数据缓冲区中的首个视频片段执行以下处理:所述桥接程序中的所述读取函数从所述数据缓冲区中读取所述首个视频片段;将读取指针的指向位置由所述首个视频片段的起始地址调整为所述首个视频片段的终止地址;其中,所述读取指针用于定位当前读取的所述视频片段在所述视频流中的位置;所述桥接程序向所述多媒体库程序发送从所述数据缓冲区中读取的所述首个视频片段。
在一些实施例中,上述网页的视频播放装置还包括:确定模块,用于获取在所述数据缓冲区中存储的所述视频流的起始地址;将所述视频流的起始地址作为所述首个视频片段的起始地址;根据所述视频片段的长度和所述首个视频片段的起始地址,确定所述首个视频片段的终止地址,其中,所述数据缓冲区中的每个所述视频片段的长度相同;根据所述首个视频片段的起始地址和所述首个视频片段的终止地址,确定所述首个视频片段。
在一些实施例中,上述转换模块,用于对所述第一视频地址进行解析处理,得到所述第一视频地址的协议名称;对所述第一视频地址的协议名称进行转换处理,得到能够被所述多媒体库程序识别的协议名称;将所述第一视频地址中的协议名称替换为所述能够被所述多媒体库程序识别的协议名称,得到所述能够被所述多媒体库程序识别的第二视频地址。
在一些实施例中,上述逆转换模块,用于所述脚本程序对所述网络请求中的所述第二视频地址的协议名称进行逆转换处理,得到所述第一视频地址;所述脚本程序将所述网络请求中的所述第二视频地址替换为所述第一视频地址,得到携带所述第一视频地址的所述网络请求;所述脚本程序将所述携带所述第一视频地址的所述网络请求作为所述地址逆转换后的所述网络请求;所述脚本程序向所述服务器发送所述地址逆转换后的所述网络请求。
在一些实施例中,上述网页的视频播放装置还包括:跳转模块,用于响应于针对所述视频流的视频跳转操作,调用所述多媒体库程序中的跳转接口,并确定所述视频跳转操作对应的跳转点,其中,所述跳转接口包括所述多媒体库程序中的跳转全局函数;所述多媒体库程序中的跳转接口调用所述桥接程序中的跳转函数,以使所述桥接程序中的跳转函数将播放所述视频流的播放时刻从当前播放时刻跳转至所述跳转点。
在一些实施例中,上述跳转模块,还用于当所述跳转点对应的播放时刻在所述数据缓冲区中时,所述桥接程序中的跳转函数将播放所述视频流的播放时刻,从所述当前播放时刻跳转至所述数据缓冲区中与所述跳转点对应的播放时刻;当所述跳转点对应的播放时刻不在所述数据缓冲区中时,所述桥接程序向所述脚本程序发送获取请求;所述脚本程序接收并转发所述获取请求至所述服务器,以从所述服务器获取包括跳转点对应的播放时刻的所述视频流,并将所述服务器后续返回的视频流存储至所述桥接程序的数据缓冲区中;所述桥接程序中的跳转函数将播放所述视频流的播放时刻,从所述当前播放时刻跳转至所述数据缓冲区中与所述跳转点对应的播放时刻。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例上述的网页的视频播放方法。
本申请实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的网页的视频播放方法,例如,如图3A示出的网页的视频播放方法。
在一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
综上,本申请实施例具有以下有益效果:
(1)通过多媒体库程序、脚本程序和桥接程序之间的地址传递和视频流传递,从而在播放多个不同视频格式的视频的过程中,有效保证了地址传递和视频流传递过程中的连续性,从而使得多媒体库程序能够连续的播放多个不同视频格式的视频,显著提高多媒体库程序播放网页视频的普适性和连续性。
(2)通过将第一视频地址转换为第二视频地址,并通过桥接程序将第二视频地址发送至多媒体库程序,从而使得多媒体库程序能够识别到网页传入的相应地址,便于多媒体库程序进一步获取相应的视频数据。
(3)由于脚本程序和多媒体库程序所能够识别的视频地址不同,通过对脚本程序所能识别的视频地址(即第一视频地址)和多媒体库程序所能识别的视频地址(即第二视频地址)进行互相转换,从而有效确保了视频地址在脚本程序和多媒体库程序中均能有效识别,同时并在网络请求中对其所携带的视频地址进行更新替换,从而保证了通过网络请求能够从服务器中准确的获取到相应的视频数据。
(4)通过将服务器返回的视频片段预先存储至脚本程序的视频片段数组中,再通过桥接程序读取视频片段数组中的视频片段,并将读取的视频片段存储至桥接程序的数据缓冲区中,从而通过视频片段数组的中间过渡存储,保证了视频流在传输过程中的数据稳定性。而且,在视频片段数组中,通过将已读取的视频片段标记已读取片段,将除已读取视频片段以外的视频片段标记为未读取视频片段,从而更加便于对视频片段数组中存储的视频片段进行有效管理。
(5)通过对视频片段数组中的未读取视频片段的数量进行判断是否大于未读取数量阈值,从而控制读取视频片段数组中的视频片段的读取进程,从而更有利于调配读取进程,有效加强了视频片段数组中视频片段的读取效率。
(6)通过读取指针定位当前读取的视频片段在视频流中的位置,可以使得读取视频流中的视频片段时,能够及时定位到当前读取的视频片段在视频流中的具体位置,有效提高了读取视频片段的读取效率。
(7)通过确定出数据缓冲区中的视频流中的首个视频片段,从而在后续读取的过程中,按照首个视频片段的读取方式,依次进行后续视频片段的读取,从而有效提高了视频片段的读取效率。
(8)通过判断跳转点对应的播放时刻是否在数据缓冲区中,从而有效确保了能够从当前播放时刻跳转至跳转点对应的播放时刻,保证了跳转后播放视频流的连贯性,有效提高了多媒体库程序播放网页视频的连续性。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。

Claims (12)

1.一种网页的视频播放方法,其特征在于,在浏览器环境中运行有多媒体库程序、脚本程序和桥接程序;所述方法包括:
所述脚本程序接收网页传入的第一视频地址,将所述第一视频地址转换为能够被所述多媒体库程序识别的第二视频地址,并通过所述桥接程序将所述第二视频地址发送给所述多媒体库程序;
所述多媒体库程序经由所述桥接程序向所述脚本程序发送携带所述第二视频地址的网络请求,以使
所述脚本程序将所述网络请求中的所述第二视频地址逆转换为所述第一视频地址,并向服务器发送地址逆转换后的所述网络请求,将所述服务器返回的视频流存储至所述桥接程序的数据缓冲区;
所述多媒体库程序从所述数据缓冲区读取所述视频流并播放所述视频流。
2.根据权利要求1所述的方法,其特征在于,
所述视频流包括多个视频片段;
所述将所述服务器返回的视频流存储至所述桥接程序的数据缓冲区,包括:
针对每个所述视频片段执行以下处理:
所述脚本程序接收所述服务器返回的所述视频片段,并将所述视频片段存储至所述脚本程序的视频片段数组中;
所述桥接程序读取所述视频片段数组中的视频片段,并将读取的所述视频片段存储至所述桥接程序的数据缓冲区;其中,在所述脚本程序的视频片段数组中,已读取的所述视频片段被标记已读取片段。
3.根据权利要求2所述的方法,其特征在于,
在所述脚本程序的视频片段数组中,除所述已读取视频片段以外的视频片段被标记为未读取视频片段;
所述桥接程序读取所述视频片段数组中的视频片段,包括:
当所述视频片段数组中的所述未读取视频片段的数量大于未读取数量阈值时,所述桥接程序读取所述视频片段数组中的所述未读取视频片段;
所述将读取的所述视频片段存储至所述桥接程序的数据缓冲区,包括:
所述桥接程序将读取的所述未读取视频片段存储至所述桥接程序的数据缓冲区中;其中,已读取的所述未读取视频片段被标记为已读取视频片段。
4.根据权利要求1所述的方法,其特征在于,
所述视频流包括多个视频片段;
所述多媒体库程序从所述数据缓冲区读取所述视频流并播放所述视频流,包括:
响应于针对所述视频流的视频播放操作,所述多媒体库程序调用所述多媒体库程序中的读取接口,其中,所述读取接口包括所述多媒体库程序中的读取全局函数;
所述多媒体库程序中的读取接口调用所述桥接程序中的读取函数,以使
所述桥接程序中的读取函数从所述数据缓冲区中依次读取所述视频片段,并向所述多媒体库程序发送从所述数据缓冲区中依次读取的所述视频片段。
5.根据权利要求4所述的方法,其特征在于,所述桥接程序中的读取函数从所述数据缓冲区中依次读取所述视频片段,包括:
针对所述数据缓冲区中的首个视频片段执行以下处理:
所述桥接程序中的所述读取函数从所述数据缓冲区中读取所述首个视频片段;
将读取指针的指向位置由所述首个视频片段的起始地址调整为所述首个视频片段的终止地址;
其中,所述读取指针用于定位当前读取的所述视频片段在所述视频流中的位置;
所述向所述多媒体库程序发送从所述数据缓冲区中依次读取的所述视频片段,包括:
所述桥接程序向所述多媒体库程序发送从所述数据缓冲区中读取的所述首个视频片段。
6.根据权利要求5所述的方法,其特征在于,所述桥接程序中的所述读取函数从所述数据缓冲区中读取所述首个视频片段之前,所述方法还包括:
获取在所述数据缓冲区中存储的所述视频流的起始地址;
将所述视频流的起始地址作为所述首个视频片段的起始地址;
根据所述视频片段的长度和所述首个视频片段的起始地址,确定所述首个视频片段的终止地址,其中,所述数据缓冲区中的每个所述视频片段的长度相同;
根据所述首个视频片段的起始地址和所述首个视频片段的终止地址,确定所述首个视频片段。
7.根据权利要求1所述的方法,其特征在于,所述将所述第一视频地址转换为能够被所述多媒体库程序识别的第二视频地址,包括:
对所述第一视频地址进行解析处理,得到所述第一视频地址的协议名称;
对所述第一视频地址的协议名称进行转换处理,得到能够被所述多媒体库程序识别的协议名称;
将所述第一视频地址中的协议名称替换为所述能够被所述多媒体库程序识别的协议名称,得到所述能够被所述多媒体库程序识别的第二视频地址;
所述脚本程序将所述网络请求中的所述第二视频地址逆转换为所述第一视频地址,并向服务器发送地址逆转换后的所述网络请求,包括:
所述脚本程序对所述网络请求中的所述第二视频地址的协议名称进行逆转换处理,得到所述第一视频地址;
所述脚本程序将所述网络请求中的所述第二视频地址替换为所述第一视频地址,得到携带所述第一视频地址的所述网络请求;
所述脚本程序将所述携带所述第一视频地址的所述网络请求作为所述地址逆转换后的所述网络请求;
所述脚本程序向所述服务器发送所述地址逆转换后的所述网络请求。
8.根据权利要求1所述的方法,其特征在于,所述多媒体库程序从所述数据缓冲区读取所述视频流之后,所述方法还包括:
响应于针对所述视频流的视频跳转操作,调用所述多媒体库程序中的跳转接口,并确定所述视频跳转操作对应的跳转点,其中,所述跳转接口包括所述多媒体库程序中的跳转全局函数;
所述多媒体库程序中的跳转接口调用所述桥接程序中的跳转函数,以使
所述桥接程序中的跳转函数将播放所述视频流的播放时刻从当前播放时刻跳转至所述跳转点。
9.根据权利要求8所述的方法,其特征在于,所述桥接程序中的跳转函数将播放所述视频流的播放时刻从当前播放时刻跳转至所述跳转点,包括:
当所述跳转点对应的播放时刻在所述数据缓冲区中时,所述桥接程序中的跳转函数将播放所述视频流的播放时刻,从所述当前播放时刻跳转至所述数据缓冲区中与所述跳转点对应的播放时刻;
当所述跳转点对应的播放时刻不在所述数据缓冲区中时,所述桥接程序向所述脚本程序发送获取请求;所述脚本程序接收并转发所述获取请求至所述服务器,以从所述服务器获取包括跳转点对应的播放时刻的所述视频流,并将所述服务器后续返回的视频流存储至所述桥接程序的数据缓冲区中;所述桥接程序中的跳转函数将播放所述视频流的播放时刻,从所述当前播放时刻跳转至所述数据缓冲区中与所述跳转点对应的播放时刻。
10.一种网页的视频播放装置,其特征在于,在浏览器环境中运行有多媒体库程序、脚本程序和桥接程序,所述装置包括:
转换模块,用于所述脚本程序接收网页传入的第一视频地址,转换为能够被所述多媒体库程序识别的第二视频地址,并通过所述桥接程序将所述第二视频地址发送给所述多媒体库程序;
发送模块,用于所述多媒体库程序经由所述桥接程序向所述脚本程序发送携带所述第二视频地址的网络请求;
逆转换模型,用于所述脚本程序将所述网络请求中的所述第二视频地址逆转换为所述第一视频地址;
存储模块,用于向服务器发送地址逆转换后的所述网络请求,将所述服务器返回的视频流存储至所述桥接程序的数据缓冲区;
读取播放模块,用于多媒体库程序从所述数据缓冲区读取所述视频流并播放所述视频流。
11.一种电子设备,其特征在于,所述电子设备包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令或者计算机程序时,实现权利要求1至9任一项所述的网页的视频播放方法。
12.一种计算机可读存储介质,存储有计算机可执行指令,其特征在于,所述计算机可执行指令被处理器执行时实现权利要求1至9任一项所述的网页的视频播放方法。
CN202111320096.6A 2021-11-09 2021-11-09 网页的视频播放方法及装置 Active CN114051161B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111320096.6A CN114051161B (zh) 2021-11-09 2021-11-09 网页的视频播放方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111320096.6A CN114051161B (zh) 2021-11-09 2021-11-09 网页的视频播放方法及装置

Publications (2)

Publication Number Publication Date
CN114051161A CN114051161A (zh) 2022-02-15
CN114051161B true CN114051161B (zh) 2022-11-29

Family

ID=80207538

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111320096.6A Active CN114051161B (zh) 2021-11-09 2021-11-09 网页的视频播放方法及装置

Country Status (1)

Country Link
CN (1) CN114051161B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103338401A (zh) * 2013-06-03 2013-10-02 贝壳网际(北京)安全技术有限公司 用于移动终端浏览器中的视频播放控制方法、装置和系统
WO2013185514A1 (zh) * 2012-06-13 2013-12-19 天脉聚源(北京)传媒科技有限公司 一种播放流媒体的系统和方法
CN106844763A (zh) * 2017-02-21 2017-06-13 无锡华云数据技术服务有限公司 一种对互联网媒体文件进行修改式展现的方法及其装置
CN110446114A (zh) * 2019-08-19 2019-11-12 广州视源电子科技股份有限公司 多媒体数据的处理装置、方法、电子设备及存储介质
CN111083167A (zh) * 2019-12-31 2020-04-28 深圳市思博慧数据科技有限公司 一种跨浏览器的h.265视频播放方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013185514A1 (zh) * 2012-06-13 2013-12-19 天脉聚源(北京)传媒科技有限公司 一种播放流媒体的系统和方法
CN103338401A (zh) * 2013-06-03 2013-10-02 贝壳网际(北京)安全技术有限公司 用于移动终端浏览器中的视频播放控制方法、装置和系统
CN106844763A (zh) * 2017-02-21 2017-06-13 无锡华云数据技术服务有限公司 一种对互联网媒体文件进行修改式展现的方法及其装置
CN110446114A (zh) * 2019-08-19 2019-11-12 广州视源电子科技股份有限公司 多媒体数据的处理装置、方法、电子设备及存储介质
CN111083167A (zh) * 2019-12-31 2020-04-28 深圳市思博慧数据科技有限公司 一种跨浏览器的h.265视频播放方法

Also Published As

Publication number Publication date
CN114051161A (zh) 2022-02-15

Similar Documents

Publication Publication Date Title
CN109885311B (zh) 一种应用程序的生成方法及设备
US6996800B2 (en) MVC (model-view-controller) based multi-modal authoring tool and development environment
US9235451B2 (en) Browser kernel switching method
CN107635027B (zh) 一种域名解析方法、介质、装置和计算设备
US20080147671A1 (en) System for Running Web Applications Offline and Providing Access to Native Services
US20010034743A1 (en) Method and apparatus for creating relocatable internet web sites
JP5050055B2 (ja) モバイルデバイスユーザ経験の仮想化
US11240290B2 (en) Application download method and apparatus, application sending method and apparatus, and system
US11496585B2 (en) Browser navigation for facilitating data access
KR100749845B1 (ko) 모바일 액티브 페이지 기능을 제공하는 이동 단말 및 그의무선 인터넷 서비스 제공 방법
CN101799766A (zh) Widget引擎中使用第三方引擎解析脚本文件的方法和装置
CN114036439A (zh) 网站搭建方法、装置、介质及电子设备
CN103917951B (zh) 应用调用的方法及操作系统、浏览器
CN114051161B (zh) 网页的视频播放方法及装置
CN112988127A (zh) Cdn业务定制方法及系统
CN111666074B (zh) 一种web应用定制的方法、相关装置及系统
Chmielewski et al. Application architectures for smart multi-device applications
CN110399040B (zh) 多模态交互方法、用户端设备、服务器及系统
CN112052377B (zh) 资源推荐方法、装置、服务器和存储介质
US20220365959A1 (en) Multimedia file storage and access method
Honkala Web user interaction: a declarative approach based on XForms
CN112256991A (zh) 一种融合多链接地址的信息流的原生渲染的方法与设备
CN105204882A (zh) 一种应用的运行方法及终端
US11997172B2 (en) Browser navigation for facilitating data access
US10469606B2 (en) Method for web service supporting synchronous hosting of multiple devices

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