CN116684515B - 流媒体视频的seek处理方法、电子设备及存储介质 - Google Patents

流媒体视频的seek处理方法、电子设备及存储介质 Download PDF

Info

Publication number
CN116684515B
CN116684515B CN202211183037.3A CN202211183037A CN116684515B CN 116684515 B CN116684515 B CN 116684515B CN 202211183037 A CN202211183037 A CN 202211183037A CN 116684515 B CN116684515 B CN 116684515B
Authority
CN
China
Prior art keywords
video
seek
frame
time
mode
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
CN202211183037.3A
Other languages
English (en)
Other versions
CN116684515A (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.)
Honor Device Co Ltd
Original Assignee
Honor Device 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 Honor Device Co Ltd filed Critical Honor Device Co Ltd
Priority to CN202211183037.3A priority Critical patent/CN116684515B/zh
Publication of CN116684515A publication Critical patent/CN116684515A/zh
Application granted granted Critical
Publication of CN116684515B publication Critical patent/CN116684515B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M1/00Substation equipment, e.g. for use by subscribers
    • H04M1/72Mobile telephones; Cordless telephones, i.e. devices for establishing wireless links to base stations without route selection
    • H04M1/724User interfaces specially adapted for cordless or mobile telephones
    • H04M1/72403User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0484Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
    • G06F3/0486Drag-and-drop
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M1/00Substation equipment, e.g. for use by subscribers
    • H04M1/72Mobile telephones; Cordless telephones, i.e. devices for establishing wireless links to base stations without route selection
    • H04M1/724User interfaces specially adapted for cordless or mobile telephones
    • H04M1/72403User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality
    • H04M1/7243User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality with interactive means for internal management of messages
    • H04M1/72439User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality with interactive means for internal management of messages for image or video messaging

Landscapes

  • Engineering & Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Business, Economics & Management (AREA)
  • General Business, Economics & Management (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

本申请提供了一种流媒体视频的seek处理方法、电子设备及存储介质,涉及视频播放技术领域。在触发进度条拖动事件后,分析指定时间点在视频总长度中的位置情况,并基于位置情况分析指定时间点与最近I帧之间的时间差是否小于精准seek的最大间隔阈值,从预设的多个seek模式中选择出适合当前seek场景的seek模式:若时间差大于或等于最大间隔阈值,则选择精准seek模式;若时间差小于最大间隔阈值,则选择非精准seek模式。通过本申请方案,通过选择合适的seek模式进行定位,可以使得进度条拖动后的视频定位更加准确,并且使得视频切换所需耗时变短,由此可以提升进度条拖动效果,提升用户在拖动进度条后的观影体验。

Description

流媒体视频的seek处理方法、电子设备及存储介质
技术领域
本申请涉及视频播放技术领域,尤其涉及一种流媒体视频的seek处理方法、电子设备及存储介质。
背景技术
目前,当用户通过电子设备观看视频时,可以支持视频播放内容的快进或者快退功能,用户只需在视频界面中的进度条上拖动播放点(或者滑动手指),即可触发将视频播放内容切换到拖动停止位置处继续播放。
在实际实现时,通常采用定位(seekTo)方式进行视频播放内容的定位。其中,seekTo跳转的位置并不是seek位置点(即指定时间点),而是距离指定时间点最近的关键帧。例如,目前默认采用的seekTo方式为SEEK_PREVIOUS_SYNC模式;在应用该SEEK_PREVIOUS_SYNC模式时,会搜索指定时间点以及在指定时间点之前最近的关键帧,也就是说,通常会定位到指定时间点前的最近一个I帧,然后继续播放。例如,假设用户将进度条上的播放点手动拖动到某个位置,例如1分钟,此时可能会从58秒开始继续播放。
然而,在采用上述seekTo方式进行视频播放内容的定位时,在一些情况下,视频画面切换的时间相对较长;在另一些情况下,在视频画面切换的过程中出现进度条跳动,定位不准确的问题,影响用户观影体验。
发明内容
本申请提供一种流媒体视频的seek处理方法及电子设备,解决了在采用默认seekTo方式进行视频播放内容的定位时存在耗时长或者定位不准确的问题。
为达到上述目的,本申请采用如下技术方案:
第一方面,本申请提供一种流媒体视频的seek处理方法,该方法包括:
响应于对流媒体视频的定位seek操作,确定所述seek操作对应的第一时间点;
根据所述第一时间点和所述流媒体视频的视频总长度,确定所述第一时间点位于所述流媒体视频的第一时间段内;
确定所述第一时间点与第一帧之间的第一时间差,所述第一帧为所述流媒体视频中与所述第一时间点距离最近的关键I帧;
当所述第一时间差与所述视频总长度之间的比例小于第一预设比例时,确定第一seek模式作为目标seek模式,所述第一seek模式为与所述第一时间段对应的seek模式;或者,
当所述第一时间差与所述视频总长度之间的比例大于或等于第一预设比例时,确定第二seek模式作为所述目标seek模式;
采用所述目标seek模式,定位到所述流媒体视频的第二时间点;
从所述第二时间点开始播放所述流媒体视频;
其中,所述第一seek模式为SEEK_PREVIOUS_SYNC模式,SEEK_NEXT_SYNC模式,或者SEEK_CLOSEST_SYNC模式;第二seek模式为SEEK_CLOSEST模式。
通过本申请提供的流媒体视频的seek处理方法,在触发进度条拖动事件后,获取流媒体视频的视频长度以及IBP帧分布情况等数据,分析指定时间点在视频总长度中的位置情况,并分析指定时间点与最近I帧之间的时间差是否小于精准seek的最大间隔阈值,从预设的多个seek模式中选择出适合当前seek场景的seek模式:若时间差大于或等于该最大间隔阈值,则选择精准seek模式;若时间差小于该最大间隔阈值,则选择非精准seek模式。通过本申请方案,通过选择合适的seek模式进行定位,可以使得视频定位更加准确,并且使得进度条拖动后的视频定位所需耗时短,由此可以提升进度条拖动效果,提升用户在拖动进度条后的观影体验。
其中,精准seek模式为SEEK_CLOSEST模式;非精准seek模式为SEEK_PREVIOUS_SYNC模式,SEEK_NEXT_SYNC模式,SEEK_CLOSEST_SYNC模式或者SEEK_CLOSEST模式。
在一些可能实现方式中,上述确定目标seek模式的过程是通过调用SeekTo函数完成的,该SeekTo函数为预设的自适应定位SEEK_AUTO函数。这样可以实现视频的智能seek,可以针对不同的视频优化seek的速度和体验。例如,在进度条拖动后可以准确定位到指定时间点,使得视频画面能够切换到指定时间点并继续进行播放;或者在进度条拖动后可以准确定位到距离指定时间点最近的关键帧,使得视频画面能够切换到距离指定时间点最近的关键帧并继续进行播放,由此保证准确定位且提升了定位速度。
在一些可能实现方式中,当第一时间段为所述流媒体视频的开头片段时,所述第一帧为所述流媒体视频的首位I帧,所述第一帧位于所述第一时间点之前。
在一些可能实现方式中,当第一时间段为所述流媒体视频的中间片段时,所述第一帧位于所述第一时间点之前或者之后。
在一些可能实现方式中,当第一时间段为所述流媒体视频的结尾片段时,所述第一帧为所述流媒体视频的末位I帧,所述第一帧位于所述第一时间点之后。
在一些可能实现方式中,在所述第一时间段为所述流媒体视频的开头片段的情况下,与所述第一时间段对应的第一seek模式预设为SEEK_PREVIOUS_SYNC模式。
其中,所述当所述第一时间差与所述视频总长度之间的比例小于所述第一预设比例时,确定第一seek模式作为目标seek模式,包括:
当所述第一时间差与所述视频总长度之间的比例小于所述第一预设比例时,确定所述SEEK_PREVIOUS_SYNC模式作为所述目标seek模式。
在一些可能实现方式中,在所述第一时间段为所述流媒体视频的中间片段的情况下,与所述第一时间段对应的第一seek模式预设为SEEK_CLOSEST_SYNC模式。
其中,所述当所述第一时间差与所述视频总长度之间的比例小于所述第一预设比例时,确定第一seek模式作为目标seek模式,包括:
当所述第一时间差与所述视频总长度之间的比例小于所述第一预设比例时,确定所述SEEK_CLOSEST_SYNC模式作为所述目标seek模式。
在一些可能实现方式中,在所述第一时间段为所述流媒体视频的结尾片段的情况下,与所述第一时间段对应的第一seek模式预设为SEEK_NEXT_SYNC模式。
其中,所述当所述第一时间差与所述视频总长度之间的比例小于所述第一预设比例时,确定第一seek模式作为目标seek模式,包括:当所述第一时间差与所述视频总长度之间的比例小于所述第一预设比例时,确定所述SEEK_NEXT_SYNC模式作为所述目标seek模式。
在本申请实施例中,可以根据第一时间点在流媒体视频中的位置,以及第一时间点与最近I帧的时间差占视频总长度的占比情况,从预设的多个seek模式中选择目标seek模式。其中,预设的多个seek模式包括SEEK_PREVIOUS_SYNC模式,SEEK_NEXT_SYNC模式,SEEK_CLOSEST_SYNC模式,以及SEEK_CLOSEST模式。
在一些可能实现方式中,第一时间点在流媒体视频中的位置可以包括以下三种情况:
(1)第一时间点位于流媒体视频的开头片段;
(2)第一时间点位于流媒体视频的中间片段;
(3)第一时间点位于流媒体视频的结尾片段;
可以先确定第一时间点是位于流媒体视频的开头片段、还是中间片段,或者是结尾片段。开头片段,中间片段和结尾片段分别对应不同的seek模式。
例如,开头片段对应的seek模式包括SEEK_PREVIOUS_SYNC模式,以及SEEK_CLOSEST模式。
例如,中间片段对应的seek模式包括SEEK_CLOSEST_SYNC模式,以及SEEK_CLOSEST模式。
例如,结尾片段对应的seek模式包括SEEK_CLOSEST_SYNC模式,以及SEEK_CLOSEST模式。
在一些可能实现方式中,在确定了第一时间点位于流媒体视频的开头片段之后,可以获取第一时间点与距离最近的关键I帧之间的时间差。在开头片段的情况下,可以将流媒体视频的首位I帧作为与第一时间点距离最近的关键I帧。可以理解的是,首位I帧在第一时间点之前。
在一些可能实现方式中,在确定了第一时间点位于流媒体视频的中间片段之后,可以获取第一时间点与距离最近的关键I帧之间的时间差。在中间片段的情况下,与第一时间点距离最近的关键I帧可能在第一时间点之前,也可能在第一时间点之后。
在一些可能实现方式中,在确定了第一时间点位于流媒体视频的结尾片段之后,可以获取第一时间点与距离最近的关键I帧之间的时间差。在开头片段的情况下,可以将流媒体视频的末位I帧作为与第一时间点距离最近的关键I帧。可以理解的是,末位I帧在第一时间点之后。
在获取第一时间点与距离最近的关键I帧之间的时间差之后,可以进一步确定第一时间点与最近I帧的时间差占视频总长度的占比情况。
在一些可能实现方式中,第一时间点与最近I帧的时间差占视频总长度的占比情况,可以通过将第一时间点与最近I帧的时间差占视频总长度的占比与第一预设比例进行比较进行判断。
示例性地,假设第一预设比例取1/100,相应地可以判断第一时间差与视频总长度之间的比例是否小于1/100,即判断第一时间差是否小于视频总长度的1/100,由此判断第一时间点与最近I帧的时间差,占视频总长度的占比情况。
其中,为了便于说明,可以将第一时间点称为seek操作点,将seek操作的场景称为seek场景,将第二时间点称为seek定位点。
第一场景:假设第一时间点位于流媒体视频的开头片段,该开头片段对应的seek模式包括SEEK_PREVIOUS_SYNC模式,以及SEEK_CLOSEST模式。在第一时间点位于流媒体视频的开头片段之后,获取第一时间点与距离最近的首位I帧之间的时间差ΔT,然后判断时间差ΔT占视频总长度的占比情况,该占比情况可能存在如下两种情况:
情况一:第一时间差与视频总长度之间的比例小于1/100。根据该占比情况可以认为,当前seek场景中seek操作点与最近I帧相对较近,可以选择SEEK_PREVIOUS_SYNC模式进行最近I帧定位。通过采用SEEK_PREVIOUS_SYNC模式,可以将视频定位到该最近I帧,从该最近I帧开始播放。
情况二:第一时间差与视频总长度之间的比例大于或等于1/100。根据该占比情况可以认为,当前seek场景中seek操作点与最近I帧相对较远,可以选择SEEK_CLOSEST模式进行精准定位。通过采用SEEK_CLOSEST模式,可以将视频定位到与seek操作点最近的一个视频帧,从最近的该视频帧开始播放;其中,该视频帧可能是I帧,也可能是B帧,还可能是P帧,具体可以根据实际情况确定。
需要说明的是,对于SEEK_CLOSEST模式,如果定位到的视频帧是B帧或者P帧,而不是I帧,那么需要对定位到的B帧或者P帧进行解码,由于对B帧或者P帧属于预测帧,其解码需要借助于关键I帧,因此该情况下定位所需耗时相对较长。
第二场景:假设第一时间点位于流媒体视频的中间片段,该中间片段对应的seek模式包括SEEK_CLOSEST_SYNC模式,以及SEEK_CLOSEST模式。在第一时间点位于流媒体视频的中间片段之后,获取第一时间点与距离最近的I帧之间的时间差ΔT,然后判断时间差ΔT占视频总长度的占比情况,该占比情况可能存在如下两种情况:
情况一:第一时间差与视频总长度之间的比例小于1/100。根据该占比情况可以认为,当前seek场景中seek操作点与最近I帧相对较近,可以选择SEEK_CLOSEST_SYNC模式进行最近I帧定位。通过采用SEEK_CLOSEST_SYNC模式,可以将视频定位到与seek操作点距离最近的I帧,从该最近I帧开始播放。其中,此处定位到与seek操作点距离最近的I帧,可能在seek操作点之前,也可能在seek操作点之后,具体可以根据实际情况确定。
情况二:第一时间差与视频总长度之间的比例大于或等于1/100。根据该占比情况可以认为,当前seek场景中seek操作点与最近I帧相对较远,可以选择SEEK_CLOSEST模式进行精准定位。通过采用SEEK_CLOSEST模式,可以将视频定位到与seek操作点最近的一个视频帧,从最近的该视频帧开始播放,其中该视频帧可能是I帧,也可能是B帧,还可能是P帧,具体可以根据实际情况确定。
第三场景:假设第一时间点位于流媒体视频的结尾片段,该结尾片段对应的seek模式包括SEEK_NEXT_SYNC模式,以及SEEK_CLOSEST模式。在第一时间点位于流媒体视频的结尾片段之后,获取第一时间点与距离最近的末位I帧之间的时间差ΔT,然后判断时间差ΔT占视频总长度的占比情况,该占比情况可能存在如下两种情况:
情况一:第一时间差与视频总长度之间的比例小于1/100。根据该占比情况可以认为,当前seek场景中seek操作点与最近末位I帧相对较近,可以选择SEEK_NEXT_SYNC模式进行最近I帧定位。通过采用SEEK_NEXT_SYNC模式,可以将视频定位到与seek操作点距离最近的末位I帧,从该最近末位I帧开始播放。
情况二:第一时间差与视频总长度之间的比例大于或等于1/100。根据该占比情况可以认为,当前seek场景中seek操作点与最近I帧相对较远,可以选择SEEK_CLOSEST模式进行精准定位。通过采用SEEK_CLOSEST模式,可以将视频定位到与seek操作点最近的一个视频帧,从最近的该视频帧开始播放,其中该视频帧可能是I帧,也可能是B帧,还可能是P帧,具体可以根据实际情况确定。
由此根据第一时间点在流媒体视频中的位置,以及第一时间点与最近I帧的时间差占视频总长度的占比情况,从预设的多个seek模式中选择出适合当前seek场景的seek模式,在通过所选seek模式进行最近I帧定位时,可以使得进度条拖动后的视频定位所需耗时短,而在通过所选seek模式进行精准定位时,可以使得视频定位更加准确,由此可以提升进度条拖动效果,提升用户在拖动进度条后的观影体验。
在一些可能实现方式中,所述根据所述第一时间点和所述流媒体视频的视频总长度,确定所述第一时间点位于所述流媒体视频的第一时间段内,包括:
当所述第一时间点对应的第一时间段与所述视频总长度之间的比例小于第二预设比例时,确定所述第一时间点位于所述流媒体视频的开头片段内,所述第一时间段为所述流媒体视频从头开始到所述第一时间点之间的时长;
或者,当所述第一时间段与所述视频总长度之间的比例大于或等于所述第二预设比例且小于第三预设比例时,确定所述第一时间点位于所述流媒体视频的中间片段内;
或者,当所述第一时间段与所述视频总长度之间的比例大于或等于所述第三预设比例时,确定所述第一时间点位于所述流媒体视频的结尾片段内;
其中,所述第二预设比例小于所述第三预设比例,所述第二预设比例和所述第三预设比例大于所述第一预设比例。
示例性地,第一预设比例可以取1/100,第二预设比例可以取1/10,第三预设比例可以取9/10。
在一些可能实现方式中,在所述目标seek模式为SEEK_PREVIOUS_SYNC模式,或者SEEK_NEXT_SYNC模式,或者SEEK_CLOSEST_SYNC模式的情况下,所述第二时间点处的视频帧为与所述第一时间点距离最近的I帧;
在所述目标seek模式为SEEK_CLOSEST模式的情况下,所述第二时间点处的视频帧为与所述第一时间点距离最近的I帧或者B帧或者P帧。
在一些可能实现方式中,所述确定所述第一时间点与第一帧之间的第一时间差,包括:从缓存区中获取所述流媒体视频的视频帧分布数据和视频帧时间数据;根据所述第一时间点、所述视频帧分布数据以及所述视频帧时间数据,确定所述第一时间点与所述第一帧之间的所述第一时间差;其中,所述视频帧分布数据用于表示I帧、B帧和P帧的分布情况,所述视频帧时间数据包括所述流媒体视频中每一帧的显示时间戳(presentation timestamp,PTS)。
在一些可能实现方式中,在所述获取视频帧分布数据和视频帧时间数据之前,所述方法还包括:获取所述流媒体视频的视频轨道数据;根据所述视频轨道数据,确定所述视频帧分布数据和所述视频帧时间数据;在所述缓存区中缓存所述视频帧分布数据和所述视频帧时间数据。
在一些可能实现方式中,在所述响应于对流媒体视频的定位seek操作,确定所述seek操作对应的第一时间点之前,所述方法还包括:接收用户在所述流媒体视频的播放界面上的第一操作,所述第一操作为触发所述流媒体视频快进播放或者快退播放的操作;其中,所述第一操作为对所述流媒体视频的seek操作。
在一些可能实现方式中,在所述采用所述目标seek模式,定位到所述流媒体视频的第二时间点之后,所述方法还包括;在显示屏上更新显示所述流媒体视频的进度条;其中,所述进度条对应的当前播放位置从所述第一时间点跳转到所述第二时间点。
在一些可能实现方式中,所述从所述第二时间点开始播放所述流媒体视频,包括:对所述第二时间点处的帧数据进行解码,得到解码后的帧数据;播放所述解码后的帧数据;其中,所述第二时间点处的帧数据为I帧或者B帧或者P帧。
在一些可能实现方式中,流媒体视频支持的视频编码格式包括高级视频编码(advanced video coding,AVC)或高效视频编码(high efficiency video coding,HEVC)。
第二方面,本申请提供一种流媒体视频的seek处理装置,该装置包括用于执行上述第一方面中的方法的单元。该装置可对应于执行上述第一方面中描述的方法,该装置中的单元的相关描述请参照上述第一方面的描述,为了简洁,在此不再赘述。
其中,上述第一方面描述的方法可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块或单元。例如,处理模块或单元、显示模块或单元等。
第三方面,本申请提供一种电子设备,所述电子设备包括处理器,处理器与存储器耦合,存储器用于存储计算机程序或指令,处理器用于执行存储器存储的计算机程序或指令,使得第一方面中的方法被执行。例如,处理器用于执行存储器存储的计算机程序或指令,使得该装置执行第一方面中的方法。
第四方面,本申请提供一种计算机可读存储介质,其上存储有用于实现第一方面中的方法的计算机程序(也可称为指令或代码)。例如,该计算机程序被计算机执行时,使得该计算机可以执行第一方面中的方法。
第五方面,本申请提供一种芯片,包括处理器。处理器用于读取并执行存储器中存储的计算机程序,以执行第一方面及其任意可能的实现方式中的方法。可选地,所述芯片还包括存储器,存储器与处理器通过电路或电线连接。
第六方面,本申请提供一种芯片系统,包括处理器。处理器用于读取并执行存储器中存储的计算机程序,以执行第一方面及其任意可能的实现方式中的方法。可选地,所述芯片系统还包括存储器,存储器与处理器通过电路或电线连接。
第七方面,本申请提供一种计算机程序产品,所述计算机程序产品包括计算机程序(也可称为指令或代码),所述计算机程序被计算机执行时使得所述计算机实现第一方面中的方法。
可以理解的是,上述第二方面至第七方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
附图说明
图1为本申请实施例提供的流媒体视频的seek处理方法的应用场景示意图;
图2为本申请实施例提供的一种电子设备的结构示意图;
图3为本申请实施例公开的流媒体视频的seek处理方法应用的软件架构示意图;
图4为本申请实施例公开的流媒体视频的seek处理方法应用的软件架构中各个功能模块的交互示意图;
图5为本申请实施例公开的流媒体视频的seek处理方法中涉及的视频IBP帧分布的示意图;
图6为本申请实施例公开的流媒体视频的seek处理方法的流程示意图一;
图7为本申请实施例公开的流媒体视频的seek处理方法的流程示意图二;
图8为本申请实施例公开的流媒体视频的seek处理方法中涉及的视频分段示意图;
图9为本申请实施例公开的流媒体视频的seek处理方法中选择seek模式的示意图一;
图10为本申请实施例公开的流媒体视频的seek处理方法中选择seek模式的示意图二;
图11为本申请实施例公开的流媒体视频的seek处理方法中涉及的媒体播放器的生命周期中能够触发seekTo的状态示意图;
图12为本申请实施例公开的流媒体视频的seek处理装置的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本文中术语“和/或”,是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。本文中符号“/”表示关联对象是或者的关系,例如A/B表示A或者B。
本文中的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。在本申请实施例的描述中,除非另有说明,“多个”的含义是指两个或者两个以上,例如,多个处理单元是指两个或者两个以上的处理单元等;多个元件是指两个或者两个以上的元件等。
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
目前,当用户通过电子设备观看视频时,可以支持视频播放内容的快进或者快退(也称为回看)功能,例如用户可以在视频界面上拖动进度条到某一位置(称为指定时间点),可触发切换视频播放内容,从该指定时间点附近继续播放。示例性地,如图1中(a)所示,在视频播放过程中,用户在视频界面上沿箭头方向拖动进度条,以切换视频播放内容,假设当前播放进度处于播放点1。如图1中(b)所示,当用户松开手指后,视频播放内容从播放点1切换到播放点2处,并从该播放点2处继续播放。
在实际实现时,在视频播放内容的切换场景中通常采用seekTo方式进行定位,调整播放的位置。该seekTo方式会定位(seek)到关键帧,也就是I帧。因为视频编码的关系,解码器只会从关键帧开始解码,这是因为只有I帧才包含完整的信息,而P帧和B帧包含的信息并不完全,只有依靠前后帧的信息才能解码。
通过seekTo方式定位的结果有如下两种情况:
情况一:当视频在指定时间点(即进度条拖动后停止的位置)存在关键帧(即I帧)时,调用seekTo方式在指定时间点开始播放。
情况二:在视频在指定时间点没有关键帧的情况下,调用seekTo方式,寻找离指定时间点最近的关键帧位置,从该关键帧位置开始播放。
也就是说,通过seekTo方式定位或跳转的位置可能是指定时间点,或者可能是距离指定时间点最近的关键帧。
例如,目前默认采用的seekTo方式为SEEK_PREVIOUS_SYNC模式;在应用该SEEK_PREVIOUS_SYNC模式时,会搜索指定时间点以及在指定时间点之前最近的关键帧,也就是说,通常会定位到指定时间点前的最近一个I帧后,继续播放。例如,假设用户将进度条上的播放点手动拖动到某个位置,例如1分钟,此时可能会从58秒开始继续播放。
这里,seekTo底层实现是:如果指定时间点不是关键帧,那么会向前搜索距离最近的关键帧。示例中,当进度条拖动到1分钟位置处时,如果1分钟位置处没有关键帧,而58秒位置处有关键帧,在此情况下视频会跳到58秒处开始播放。
然而,在采用上述seekTo方式进行视频播放内容的定位时,在一些情况下,视频画面切换的时间相对较长;在另一些情况下,在视频画面切换的过程中出现进度条跳动,定位不准确的问题。
另外,在暂停播放后再次播放时,也存在无法准确地定位到预期位置继续播放的问题。
鉴于此,本申请实施例提供了一种流媒体视频的seek处理方法及电子设备,通过在电子设备的系统底层进行改进,以提高用户体验。通过本申请提供的方案,在触发进度条拖动事件后,获取流媒体视频的视频长度以及IBP帧分布情况等数据,分析指定时间点在视频总长度中的位置情况,并分析指定时间点与最近I帧之间的时间差是否大于或等于精准seek的最大间隔阈值,从预设的多个seek模式中选择出适合当前seek场景的seek模式:若时间差大于或等于该最大间隔阈值,则选择精准seek模式;若时间差小于该最大间隔阈值,则选择非精准seek模式。通过本申请方案,通过选择合适的seek模式进行定位,可以使得进度条拖动后的视频定位所需耗时短,并且使得视频定位更加准确,由此可以提升进度条拖动效果,提升用户在拖动进度条后的观影体验。
其中,精准seek模式为SEEK_CLOSEST模式;非精准seek模式为SEEK_PREVIOUS_SYNC模式,SEEK_NEXT_SYNC模式,SEEK_CLOSEST_SYNC模式或者SEEK_CLOSEST模式。
参见图2,为本申请实施例提供的一种电子设备的结构示意图。电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serialbus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,触摸传感器180K,环境光传感器180L等。
可以理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。例如,处理器110用于执行本申请实施例中的环境光的检测方法。
其中,控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
外部存储器120一般指外存储器,在本申请实施例中,外部存储器是指除电子设备的内存及处理器的高速缓存以外的储存器,该储存器一般为非易失性存储器。
内部存储器121,也可以称为“内存”,可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。
显示屏194用于显示图像,视频等。显示屏194包括显示面板。显示面板可以采用有机发光二极管(organic light-emitting diode,OLED)。在一些实施例中,电子设备100可以包括1个或N个显示屏194,N为大于1的正整数。
电子设备100还包括各类传感器,可以将各种不同的物理信号转换为电信号。示例性的,压力传感器180A用于感受压力信号,可以将压力信号转换成电信号。陀螺仪传感器180B可以用于确定电子设备100的运动姿态。气压传感器180C用于测量气压。磁传感器180D包括霍尔传感器。加速度传感器180E可检测电子设备100在各个方向上(一般为三轴)加速度的大小。距离传感器180F,用于测量距离。电子设备100可以通过红外或激光测量距离。接近光传感器180G可以包括例如发光二极管(LED)和光检测器,例如光电二极管。环境光传感器180L用于感知环境光亮度。电子设备100可以根据感知的环境光亮度自适应调节显示屏194亮度。指纹传感器180H用于采集指纹。电子设备100可以利用采集的指纹特性实现指纹解锁,访问应用锁,指纹拍照,指纹接听来电等。温度传感器180J用于检测温度。在一些实施例中,电子设备100利用温度传感器180J检测的温度,执行温度处理策略。骨传导传感器180M可以获取振动信号。
触摸传感器180K,也称“触控面板”。触摸传感器180K可以设置于显示屏194,由触摸传感器180K与显示屏194组成触摸屏,也称“触控屏”。触摸传感器180K用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。可以通过显示屏194提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器180K也可以设置于电子设备100的表面,与显示屏194所处的位置不同。
示例性的,在本申请实施例中,触摸传感器180K可以检测用户对应用程序的图标的点击操作,并将检测到的点击操作传递给应用处理器,确定该点击操作用于启动或运行该应用程序,进而执行该应用程序的运行操作。
电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
电子设备100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
电子设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
电子设备100可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。
以上是以电子设备100为例对本申请实施例作出的具体说明。应该理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。电子设备100可以具有比图中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
本申请实施例提供的电子设备可以是用户设备(user equipment,UE),例如可以为移动终端(例如用户手机)、平板电脑、桌面型、膝上型笔记本电脑、手持计算机、上网本、个人数字助理(personal digital assistant,PDA)等设备。
另外,在上述部件之上,运行有操作系统,例如iOS操作系统,Android开源操作系统,或者Windows操作系统等。在该操作系统上可以安装运行应用程序。
电子设备100的操作系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本申请实施例以分层架构的Android系统为例,示例性说明电子设备100的软件结构。
图3是本申请实施例的电子设备100的软件结构框图。
分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统分为五层,从上至下分别为应用程序层(applications),应用程序框架层(application framework),安卓运行时(AndroidRuntime)和系统库,硬件抽象层(hardware abstraction layer,HAL),以及内核层(kernel)。
其中,应用程序层可以包括一系列应用程序包。例如,应用程序层可以包括媒体播放应用(MediaPlayer),以及其他应用,例如游戏,地图,社交应用,购物应用等,本申请实施例对此不做任何限制。
本申请实施例中,应用程序层还可以包括情景感知模块、业务逻辑处理模块和业务呈现模块等。情景感知模块、业务逻辑处理模块和业务呈现模块可以是独立的APP,或者可以分别集成在不同的APP中,或者可以集成在同一个APP中,本申请不做限定。
其中,情境感知模块,常驻运行或以低功耗形式运行,具有感知外部事实或者环境的能力。情境感知模块可以通过应用程序接口(application programming interface,API)从应用程序层的其他应用程序或应用程序框架层或系统层或内核层来检测相关事件和获取事件的状态,比如检测蓝牙连接、网络连接、监测用户短信、定制定时器等。在本申请实施例中,情境感知模块主要作用是监听在流媒体视频播放过程中是否有进度条拖动事件,当监听到进度条拖动事件,将进度条拖动事件通知给业务逻辑处理模块。情境感知模块还可以用于获取进度条中的指定时间点,即获取拖动停止位置对应的时间戳。
业务逻辑处理模块(如:计算引擎)具有业务逻辑处理能力。在本申请实施例中,业务逻辑处理模块接收到用户触发的进度条拖动事件及情境感知模块通知的指定时间点,调用seekTo()函数执行如下动作:确定指定时间点是处于或属于流媒体视频的开头片段,还是中间片段,或者是结尾片段;并且计算指定时间点与最近I帧之间的时间差,其中对于指定时间点在开头片段的情况,选择首位I帧计算时间差;对于指定时间点在结尾片段的情况,选择末位I帧计算时间差;对于指定时间点在中间片段的情况,选择在指定时间点之前或之后的最近I帧计算时间差。
然后根据时间差与视频总长度之间的占比情况选择seek模式,具体包括如下两种可能情况:(1)当判断时间差与视频总长度之间的比例大于或等于第一预设比例时,选择SEEK_CLOSEST模式进行精准定位;(2)当判断时间差与视频总长度之间的比例小于第一预设比例时,根据指定时间点在流媒体视频的位置情况选择seek模式。
根据指定时间点在流媒体视频的位置情况选择seek模式,包括如下三种可能实现方式:(a)指定时间点是在流媒体视频的开头片段,则选择SEEK_PREVIOUS_SYNC模式进行最近I帧定位。(b)若指定时间点是在流媒体视频的中间片段,则选择SEEK_CLOSEST_SYNC模式进行最近I帧定位。(c)若指定时间点是在流媒体视频的结尾片段,则选择SEEK_NEXT_SYNC模式进行最近I帧定位。
业务呈现模块,用于在手机的屏幕上显示视频画面。在用户拖动进度条后,触发电子设备调用seekTo()函数,定位到目标位置;在此情况下,业务呈现模块获取目标位置处的视频帧,并从该目标位置处的视频帧开始播放显示。
应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。应用程序框架层可以包括媒体播放服务(MediaPlayer),以及其他服务框架。
系统库可以包括多个功能模块,例如表面管理器(surface manager),媒体库(media libraries),三维图形处理库(例如:openGL ES),二维图形引擎(例如:SGL)等。
具体到本申请方案,系统库可以包括媒体服务模块(MediaService),该媒体服务模块包括:媒体播放服务(MediaPlayerService)、播放器驱动服务(NuPlayerDriver)、播放管理器(NuPlayer)、播放管理器的播放源(NuPlayer::Generic Source)、媒体分离器(MediaExtractor)等,本申请实施例对此不做任何限制。
其中,播放源(NuPlayer::Generic Source)的主要功能是负责本地多媒体文件的读取解析。通常播放源(GenericSource)具有下述功能:多媒体文件格式探测和多媒体文件解析。
其中,媒体分离器(MediaExtractor)可以对流媒体视频进行解析,得到音频轨道数据和视频轨道数据。并且,通过视频轨道数据可以解析出视频IBP帧分布数据;当然还可以解析出视频时长等数据。其中,视频IBP帧分布数据用于指示流媒体视频中I帧、B帧、P帧的分布情况以及各个帧对应的显示时间戳PTS;其中,I帧、B帧、P帧的分布情况可以指I帧、B帧、P帧的解码顺序。
需要说明的是,本申请实施例中,当监听到进度条拖动事件时,视频拖动进度条的操作,最终会转化为MediaPlayer seekTo()操作,播放源(GenericSource)与媒体分离器(MediaExtractor)交互,采用不同的seek模式查找离指定时间点“较近”的视频帧。具体地,根据seekTo到不同的位置(开头片段、中间片段或者结尾片段),以及指定时间点与最近I帧的距离占视频总长度的比例关系(可以通过播放源(GenericSource)模块中缓存的视频IBP帧分布数据等数据进行确定),智能地选择最优的seek模式,在保证拖动效果的前提下,以最快的速度切换到目标视频画面。
需要说明的是,进度条拖动事件监听会调用通过特定的接口进行事件监听。例如,接口内有如下三种方法:
onProgressChanged,进度条发生改变;
onStartTrackingTouch,进度条开始被拖动;
onStopTrackingTouch,进度条停止被拖动。
当通过上述方法监听到进度条拖动事件时,可以调用媒体播放器类中的seekTo方法执行seekTo函数。
安卓运行时部分负责安卓系统的调度和管理,其包括核心库和虚拟机。核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。例如,硬件抽象层可以包括视频编解码接口。系统库中的媒体分离器可以调用视频编解码接口进行视频编解码。
内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。具体到本申请方案,内核层包括视频编解码驱动。视频编解码接口可以通过调用视频编解码驱动,将流媒体视频进行编解码。
在本申请实施例中,设计了一种智能化seekTo()模式,新增一种根据条件判断结果自动选择seek模式的SEEK_AUDO函数,记为seekTo(SEEK_AUDO)函数。在用户触发进度条拖动事件的场景中,电子设备可以通过调用seekTo(SEEK_AUDO)函数,执行本申请实施例提供的方案,根据拖动进度条对应的指定时间点、视频时长、视频IBP帧分布情况等数据进行条件判断,然后根据条件判断结果,自动智能地选择出合适的seek模式(SEEK_MODE)进行定位,在保证进度条拖动效果的前提下,快速准确地切换到目标视频画面。其中,各个模块交互实现智能seek优化的过程将在下文中进行详细描述。
图4示出了软件架构中各个模块交互来实现本申请实施例提供的流媒体视频的seek处理方法的示例性时序图。如图4所示,其中示出了应用程序框架层中的媒体播放服务(MediaPlayer),以及系统库中的媒体播放服务::客户端(MediaPlayerService::Client)、播放器驱动服务(NuPlayerDriver)、播放管理器(NuPlayer)、播放管理器的播放源(NuPlayer::Generic Source),以及媒体分离器(MediaExtractor)。
其中,媒体播放服务(MediaPlayer)在接收到同步准备(prepare)或异步准备(prepareAsync)指令后调用准备函数prepareAsync,例如通过binder机制依次经由媒体播放服务::客户端(MediaPlayerService::Client)、播放器驱动服务(NuPlayerDriver)、播放管理器(NuPlayer)、播放管理器的播放源(NuPlayer::Generic Source)调用准备函数prepareAsync;然后播放源(NuPlayer::Generic Source)调用初始化准备函数(onprepareAsync),继而调用数据提取函数(initFromDataSource),尝试从媒体分离器(MediaExtractor)中获取视频轨道数据(简称视频轨道),例如获取到视频时长、IBP帧分布情况等数据。播放源(NuPlayer::Generic Source)可以将视频时长、IBP帧分布情况等数据进行缓存,在随后的seekTo函数调用时会使用这些参数进行条件判断。
在用户触发进度条拖动事件时,各个模块调用seekTo(SEEK_AUDO)函数,例如依次通过媒体播放服务(MediaPlayer)、媒体播放服务::客户端(MediaPlayerService::Client)、播放器驱动服务(NuPlayerDriver)、播放管理器(NuPlayer)、播放管理器的播放源(NuPlayer::Generic Source)调用seekTo(SEEK_AUDO)函数,执行本申请实施例提供的方案:获取根据拖动进度条对应的指定时间点,并从内存中获取之前缓存的视频时长、IBP帧分布情况等数据,然后根据指定时间点、视频时长、IBP帧分布情况等数据进行条件判断,然后根据条件判断结果,自动智能地选择出合适的seek模式(SEEK_MODE)进行定位,在保证拖动效果的前提下,以最快的速度切换到目标视频画面。
结合图4可知,本申请seekTo方案具有如下三个关键点:
关键点一:本申请方案设计了一种SEEK_MODE,称为SEEK_AUDO函数。
关键点二:本申请方案中在调用MediaPlayer prepare()或者prepareAsync()时,从视频文件中获取视频轨道并解析该视频轨道,然后将解析得到的视频IBP帧分布数据(例如IBP帧的解码顺序)、IBP帧的PTS(即每一帧的显示时间戳)等视频信息保存到缓存区中。
关键点三:本申请方案中,在seekTo被触发执行时,会调用SeekTo(SEEK_AUDO)函数,根据指定时间点、视频时长,IBP帧分布数据,以及IBP帧的PTS等,动态地从预设的四个模式中,选择最佳的seek模式。
通过上述说明可知,本申请方案中,在用户触发进度条拖动事件时,调用SEEK_AUDO函数,获取到流媒体视频的视频长度以及IBP帧分布情况,考虑到指定时间点在视频总长度中的位置情况,以及指定时间点与最近I帧的时间差在视频总长度中的占比情况,进行综合判断,能够自动智能地选择出合适的seek模式(SEEK_MODE)进行定位,例如在进度条拖动后可以准确定位到指定时间点,即视频画面切换到指定时间点并继续进行播放;或者在进度条拖动后可以准确定位到距离指定时间点最近的关键帧,即视频画面切换到距离指定时间点最近的关键帧并继续进行播放。
相对于传统seekTo方案中默认某一种seek模式进行定位不准确且可能耗时较长而言,本申请seekTo方案,能够自动智能地选择出合适的seek模式(SEEK_MODE)进行定位,在保证进度条拖动效果的前提下,快速准确地切换到目标视频画面,提升了用户观影感受。
需要说明的是,本申请实施例虽然以Android系统为例进行说明,但是其基本原理同样适用于基于iOS或Windows等操作系统的电子设备。
本申请实施例提供的流媒体视频的seek处理方法的执行主体可以为上述的电子设备,也可以为该电子设备中能够实现该流媒体视频的seek处理方法的功能模块和/或功能实体,并且本申请方案能够通过硬件和/或软件的方式实现,具体的可以根据实际使用需求确定,本申请实施例不作限定。下面以电子设备为例,结合附图对本申请实施例提供的流媒体视频的seek处理方法进行示例性的说明。
在介绍流媒体视频的seek处理方法之前,首先简单介绍流媒体视频的构成。流媒体视频(也称为视频流)包括多个视频帧,如图5所示,视频帧(即画面)分为I帧、P帧、B帧三种,分别构成多个图像组(group of pictures,GOP)。其中:I是内部编码帧(intraframeframe),P是前向预测帧,B是双向内插帧。GOP的长度(或者称为GOP周期)是一个I帧到下一个I帧的间隔。如图5所示,每个GOP组中第一帧为I帧。换言之,I帧是一个完整的画面,是每个GOP的第一个帧,而P帧和B帧记录的是相对于I帧的变化。通过I帧可以实现完整解码,因此I帧也称为关键帧。
可以理解,流媒体视频是由多个GOP构成的。对于开始播放阶段,由于视频解码需要依赖第一个I帧,因此流媒体视频的首帧视频数据应该为I帧数据。可以理解,具体到本申请方案,当视频快进或快退播放时,或者当视频暂停后继续播放时,也总是会从一个I帧的位置开始。
下面针对上下文中提及的四种seek模式进行具体说明。如下表1所示,每一种seek模式都有不同的进度条跳转表现或进度条变化,以及跳转耗时。
表1
其中,对于SEEK_PREVIOUS_SYNC,对应可记为0x00,属于同步播放模式。在采用该seek模式时,会搜索指定时间点及之前最近的关键帧,因此在用户拖动进度条到指定时间点时的效果表现为:视频播放内容会从指定时间点向前跳转然后继续播放。相应地,耗时取决于指定时间点与前一个I帧的距离(即时间差)。
对于SEEK_NEXT_SYNC,对应可记为0x01,属于同步播放模式。在采用该seek模式时,会搜索指定时间点及之后最近的关键帧,因此在用户拖动进度条到指定时间点时的效果表现为:视频播放内容会从指定时间点向后跳转然后继续播放。相应地,耗时取决于指定时间点与后一个I帧的距离(即时间差)。
对于SEEK_CLOSEST_SYNC,对应可记为0x02,属于同步播放模式。在采用该seek模式时,会搜索离指定时间点最近的关键帧,可能会向前跳转,也可能是向后跳转;例如计算指定时间点与前一I帧的距离,以及指定时间点与后一I帧的距离,判断前者小还是后者小,并选择与指定时间点距离较小的I帧,作为最近的关键帧。相应地,在用户拖动进度条到指定时间点时的效果表现为:视频播放内容会从指定时间点向前跳转然后继续播放,也可能会从指定时间点向后跳转然后继续播放。相应地,耗时取决于指定时间点与最近一个I帧的距离(即时间差)。
对于SEEK_CLOSEST,对应可记为0x03,属于异步播放模式。在采用该seek模式时,会搜索指定时间点及最近的帧,搜索到的帧不一定是I帧,有可能是P帧或B帧。如果搜索到的帧不是关键帧,那么需要找到相关帧(例如I帧等)进行解码。在用户拖动进度条到指定时间点时的效果表现为:视频播放内容会定位到指定时间点处继续播放。相对于前三个seek模式而言,该seek模式定位更加精确。一般情况下,相对于前三个seek模式而言,该seek模式的耗时较长。
需要说明的是,在本申请实施例中,如下表2预先设置了指定时间点在流媒体视频中的位置、指定时间点与最近I帧的时间差占视频总长度的占比关系、以及seek模式之间的对应关系。在本申请方案中可以根据该对应关系确定对应的seek模式,具体将在下文中进行详细描述。
表2
其中,R表示指定时间点与最近I帧之间的时间差ΔT与视频总长度T的比例。阈值可以根据实际情况进行设置,例如阈值可以取1/100。
下面再结合图6,从整体角度介绍一下本申请实施例提供的流媒体视频的seek处理方法。
电子设备接收到用户触发的进度条拖动事件,以及进度条拖动事件对应的指定时间点。
电子设备可以根据第一时间点在流媒体视频中的位置,以及第一时间点与最近I帧的时间差占视频总长度的占比情况,从预设的多个seek模式中选择目标seek模式。具体地,电子设备调用seekTo()函数执行如下动作:
如图6所示,首先,电子设备确定指定时间点(也称为第一时间点)是处于或属于流媒体视频中的哪一个时间段:视频开头片段,视频中间片段,或者是视频结尾片段。
然后,电子设备计算指定时间点与最近I帧之间的时间差。其中,对于指定时间点在视频开头片段的情况,可以选择首位I帧计算时间差;对于指定时间点在视频结尾片段的情况,可以选择末位I帧计算时间差;对于指定时间点在视频中间片段的情况,可以选择在指定时间点之前或之后的最近I帧计算时间差,具体需要根据实际情况而定。
然后,电子设备计算时间差与视频总长度之间的比例(记为R)。
然后,电子设备根据时间差与视频总长度之间的占比情况选择seek模式,具体存在如下两种可能的判断结果:
(1)当时间差与视频总长度之间的比例R大于或等于第一预设比例(简称阈值,例如取1/100)时,电子设备自动选择SEEK_CLOSEST模式。由于R≥阈值,seek操作点(也称为指定时间点或第一时间点)距离最近I帧间隔过大,跳转耗时相对较长,因此需要精准定位,否则用户会感觉到进度条跳跃明显,且等待时间较长。
需要说明的是,在该SEEK_CLOSEST模式下会定位到指定时间点,该指定时间点的视频帧可能是I帧,也可能是B帧,也可能是P帧。如果定位到的视频帧是I帧,那么解码I帧,并利用解码数据播放视频画面;如果定位到的视频帧是B帧或P帧,那么基于I帧对B帧或P帧进行解码,并利用解码数据播放视频画面。
(2)当时间差与视频总长度之间的比例R小于阈值时(即R<阈值),电子设备可以根据指定时间点在流媒体视频的位置情况选择seek模式,例如有如下三种可能实现场景:
场景一:若指定时间点是在流媒体视频的开头片段,则电子设备自动选择SEEK_PREVIOUS_SYNC模式进行最近I帧定位;
场景二:若指定时间点是在流媒体视频的中间片段,则电子设备自动选择SEEK_CLOSEST_SYNC模式进行最近I帧定位;
场景三:若指定时间点是在流媒体视频的结尾片段,则电子设备自动选择SEEK_NEXT_SYNC模式进行最近I帧定位。
下面结合具体的实施例介绍本申请实施例提供的流媒体视频的seek处理方法。
图7是本申请实施例提供的流媒体视频的seek处理方法的流程示意图。参照图7所示,该方法包括下述的步骤S201-S210。
S201、接收用户在流媒体视频的播放界面上的定位seek操作。
在视频播放过程中,用户可能会将视频进度条从一个时间点拖动到另一个时间点,来观看自己感兴趣的内容,这一操作过程称为seek操作(即回看和快进)。
在播放视频时,可以通过seekto调整播放的位置,此时会传入两个参数(longmsec,int mode)。两个参数分别为时间戳和跳转模式。
例如,代码可以表示为public voidseekTo(long timeUs,int mode)。其中,timeUs指要seek的时间戳,mode指seek的跳转模式。
示例性地,在视频播放过程中,seek操作可以指用户拖动进度条或进度条播放点的操作。或者,seek操作还可以指用户在视频界面中向左或向右滑动手指,触发快进或快退的操作。或者,seek操作还可以指触发视频暂停播放后继续播放的操作。需要说明的是,这里seek操作为示例性地说明,在实际实现时,seek操作还可以指触发切换视频播放进度的其他可能操作,具体可以根据实际使用需求确定,本申请实施例不作限定。
在本申请实施例中,流媒体视频支持的视频编码格式可以是高级视频编码AVC(H.264),也可以是高效视频编码HEVC(H.265),或者可以是其他可能的视频编码格式。
其中,在seek操作的触发下,获取相关参数,例如seek操作对应的第一时间点,第一时间点在流媒体视频中的位置(开头片段、中间片段还是结尾片段)、第一时间点与最近I帧的时间差,以及时间差与视频总长度之间的比例等,并根据相关参数选择seek模式。选择seek模式的过程是通过调用SeekTo函数完成的,该SeekTo函数为预设的自适应定位SEEK_AUTO函数。下面依次说明获取各个参数的过程,以及根据各参数进行阈值判断的过程,以及根据判断结果选择seek模式的过程。
S202、响应于对流媒体视频的seek操作,确定seek操作对应的第一时间点。
示例性地,以拖动进度条为例,在用户向前或向后拖动进度条到00:15:00的情况下,seek操作对应的第一时间点为第15分钟。
其中,第一时间点也称为指定时间点。
S203、根据第一时间点和流媒体视频的视频总长度,确定第一时间点在流媒体视频中的位置:开头片段、中间片段或结尾片段。
可选地,在本申请实施例中,如图8所示,可以将流媒体视频划分为开头片段、中间片段和结尾片段。
可以理解的是,第一时间点对应的时长为流媒体视频从头开始到第一时间点之间的时长,称为第一时间段。
在本申请实施例中,当第一时间段与所述视频总长度之间的比例小于第二预设比例时,确定第一时间点位于流媒体视频的开头片段内;或者,当第一时间段与视频总长度之间的比例大于或等于第二预设比例且小于第三预设比例时,确定第一时间点位于流媒体视频的中间片段内;或者,当第一时间段与视频总长度之间的比例大于或等于第三预设比例时,确定第一时间点位于流媒体视频的结尾片段内。
其中,第二预设比例小于第三预设比例。示例性地,第二预设比例可以取1/10,第三预设比例可以取9/10。
例如,假设流媒体视频的视频总长度表示为T,那么可以将流媒体视频划分为[0,0.1T)、[0.1T,0.9T)、[0.9T,T]三部分。[0,0.1T)为开头片段,[0.1T,0.9T)为中间片段,[0.9T,T]为结尾片段。
在本申请实施例中,第一时间段可以开头片段、中间片段或结尾片段,具体地,可以根据第一时间点和流媒体视频的视频总长度T,确定第一时间点是位于流媒体视频开头片段、中间片段和结尾片段中哪一个片段内。
示例性地,假设视频总长度为1000秒,若第一时间点为50秒,则可以确定第一时间点在开头片段,即进度条的当前播放节点被拖动至开头片段。若第一时间点为450秒,则可以确定第一时间点在中间片段,即进度条的当前播放节点被拖动至中间片段。若第一时间点为950秒,则可以确定第一时间点在结尾片段,即进度条的当前播放节点被拖动至结尾片段。
需要说明的是,这里划分流媒体视频的方式为示例性地说明,在实际实现时还可以采用其他可能的方式进行划分。
S204、搜索与第一时间点距离最近的I帧(也称为第一帧,或关键帧)。
这里,第一时间点所在位置不同,可以采用下述不同的方式搜索与第一时间点距离最近的I帧:
若第一时间点在开头片段,则搜索第一时间点之前的最近I帧。可以理解,搜索的关键帧位于第一时间点之前。
若第一时间点在中间片段,则搜索第一时间点之前的一个I帧以及之后的一个I帧,选择其中与第一时间点距离最近的I帧,作为与第一时间点距离最近的I帧。可以理解,搜索的关键帧位于第一时间点之前或者之后。
若第一时间点在结尾片段,则搜索第一时间点之后的最近I帧。可以理解,搜索的关键帧位于第一时间点之后。
需要说明的是,在流媒体视频中,I帧数据会携带I帧标识和时间戳,因此可以根据I帧标识确定哪些视频数据是I帧数据,并且可以获知该I帧数据对应的时间戳。其中,I帧标识可以根据实际使用需求采用合适的字符进行表示。例如,视频数据的I帧标识为TRUE,表示该视频数据为I帧数据。
S205、确定第一时间点与最近I帧之间的时间差(也称为第一时间差)。
在本申请实施例中,可以获取流媒体视频的视频轨道数据;然后根据该视频轨道数据,确定视频帧分布数据和视频帧时间数据;并将视频帧分布数据和视频帧时间数据存储到缓存区中。其中,视频帧分布数据用于表示I帧、B帧和P帧的分布情况,视频帧时间数据包括所述流媒体视频中每一帧的显示时间戳PTS。然后,在执行seekTo函数时,从缓存区中获取流媒体视频的视频帧分布数据和视频帧时间数据;根据第一时间点、视频帧分布数据以及视频帧时间数据,确定第一时间点与最近I帧之间的第一时间差。
也就是说,在确定最近I帧的情况下可获知最近I帧数据对应的时间戳,然后计算第一时间点和最近I帧数据对应的时间戳之间的差值,得到二者的时间差。
S206、判断第一时间差与视频总长度之间的比例是否小于第一预设比例。
其中,第一预设比例小于第二预设比例和第三预设比例。示例性地,第一预设比例可以取1/100,第二预设比例可以取1/10,第三预设比例可以取9/10。
基于上述表2中的对应关系,根据S206的结果执行下述的S207或S208。
S207、当第一时间差与视频总长度之间的比例大于或等于第一预设比例时,选择SEEK_CLOSEST模式。
S208、当第一时间差与视频总长度之间的比例小于第一预设比例时,执行下述步骤中的一项:
若是开头片段,则选择SEEK_PREVIOUS_SYNC模式。
若是中间片段,则选择SEEK_CLOSEST_SYNC模式。
若是结尾片段,则选择SEEK_NEXT_SYNC模式。
S209、采用所选seek模式(也称为目标seek模式),定位到流媒体视频的第二时间点。
示例性地,如图9中(a)所示,当选择SEEK_PREVIOUS_SYNC模式时,进行最近I帧定位,即定位到进度条拖动的位置(例如为P帧)之前的I帧。可以理解,此时第二时间点位于第一时间点之前。
示例性地,如图9中(b)所示,当选择SEEK_CLOSEST_SYNC模式时,进行最近I帧定位,即定位到进度条拖动的位置(例如为P帧)之前或者之后的I帧。可以理解,此时第二时间点位于第一时间点之前或者之后。原则是选择距离最近的I帧。
示例性地,如图9中(c)所示,当选择SEEK_NEXT_SYNC模式时,进行最近I帧定位,即定位到进度条拖动的位置(例如为B帧)之后的I帧。可以理解,此时第二时间点位于第一时间点之后。
示例性地,如图10中(a)、(b)和(c)所示,当选择SEEK_CLOSEST模式时,进行精准定位,即定位到进度条拖动的位置(第一时间点),该位置的视频帧数据可能是I帧,也可能是B帧,也可能是P帧。可以理解,此时第二时间点和第一时间点重合。
可以理解的是,在选择SEEK_PREVIOUS_SYNC模式,或者SEEK_NEXT_SYNC模式,或者SEEK_CLOSEST_SYNC模式的情况下,第二时间点处的视频帧为与第一时间点距离最近的I帧。在选择SEEK_CLOSEST模式的情况下,第二时间点处的视频帧为与第一时间点距离最近的I帧或者B帧或者P帧。
S210、从第二时间点开始播放流媒体视频。
在S210中,具体地,可以对第二时间点处的帧数据进行解码,得到解码后的帧数据,然后播放解码后的帧数据。其中,第二时间点处的帧数据可能为I帧,也可能为B帧或者P帧。相应地,在显示屏上更新显示流媒体视频的进度条,该进度条对应的当前播放位置从第一时间点跳转到第二时间点。由此,在自动选择某一seek模式并采用该seek模式完成seek定位后,从定位位置处开始继续播放。
通过上述说明可知,本申请方案中,在用户触发进度条拖动事件时,调用SEEK_AUDO函数,获取到流媒体视频的视频长度以及IBP帧分布情况,考虑到指定时间点在视频总长度中的位置情况,以及指定时间点与最近I帧的时间差在视频总长度中的占比情况,进行综合判断,能够自动智能地选择出合适的seek模式(SEEK_MODE)进行定位,例如在进度条拖动后可以准确定位到指定时间点,即视频画面切换到指定时间点并继续进行播放;或者在进度条拖动后可以准确定位到距离指定时间点最近的关键帧,即视频画面切换到距离指定时间点最近的关键帧并继续进行播放。
通过本申请提供的流媒体视频的seek处理方法,在触发进度条拖动事件后,获取流媒体视频的视频长度以及IBP帧分布情况等数据,分析指定时间点在视频总长度中的位置情况,并分析指定时间点与最近I帧之间的时间差是否大于或等于精准seek的最大间隔阈值,从预设的多个seek模式中选择出适合当前seek场景的seek模式:若时间差大于或等于该最大间隔阈值,则选择精准seek(即选择SEEK_CLOSEST模式);若时间差小于该最大间隔阈值,则选择非精准seek,例如采用SEEK_PREVIOUS_SYNC模式,SEEK_NEXT_SYNC模式,SEEK_CLOSEST_SYNC模式或者SEEK_CLOSEST模式。通过本申请方案,通过选择合适的seek模式进行定位,可以使得进度条拖动后的视频定位所需耗时短,并且使得视频定位更加准确,由此可以提升进度条拖动效果,提升用户在拖动进度条后的观影体验。
本申请方案可以实现流媒体视频的智能seek,可以针对不同的视频优化seek的速度和体验。下面从整体角度更详细地描述本申请方案的实现方式。
在本申请实施例中,可以根据第一时间点在流媒体视频中的位置,以及第一时间点与最近I帧的时间差与最大间隔阈值的比较结果,从预设的多个seek模式中选择目标seek模式。
其中,最大间隔阈值与视频总长度有关。例如,假设视频总长度表示为L,最大间隔阈值可以取L×1/100。
其中,预设的多个seek模式包括SEEK_PREVIOUS_SYNC模式,SEEK_NEXT_SYNC模式,SEEK_CLOSEST_SYNC模式,以及SEEK_CLOSEST模式。
在一些可能实现方式中,第一时间点在流媒体视频中的位置可以包括以下三种情况:
(1)第一时间点位于流媒体视频的开头片段;
(2)第一时间点位于流媒体视频的中间片段;
(3)第一时间点位于流媒体视频的结尾片段;
可以先确定第一时间点是位于流媒体视频的开头片段、还是中间片段,或者是结尾片段。开头片段,中间片段和结尾片段分别对应不同的seek模式。
例如,开头片段对应的seek模式包括SEEK_PREVIOUS_SYNC模式,以及SEEK_CLOSEST模式。
例如,中间片段对应的seek模式包括SEEK_CLOSEST_SYNC模式,以及SEEK_CLOSEST模式。
例如,结尾片段对应的seek模式包括SEEK_CLOSEST_SYNC模式,以及SEEK_CLOSEST模式。
在一些可能实现方式中,在确定了第一时间点位于流媒体视频的开头片段之后,可以获取第一时间点与距离最近的关键I帧之间的时间差。在开头片段的情况下,可以将流媒体视频的首位I帧作为与第一时间点距离最近的关键I帧。可以理解的是,首位I帧在第一时间点之前。
在一些可能实现方式中,在确定了第一时间点位于流媒体视频的中间片段之后,可以获取第一时间点与距离最近的关键I帧之间的时间差。在中间片段的情况下,与第一时间点距离最近的关键I帧可能在第一时间点之前,也可能在第一时间点之后。
在一些可能实现方式中,在确定了第一时间点位于流媒体视频的结尾片段之后,可以获取第一时间点与距离最近的关键I帧之间的时间差。在开头片段的情况下,可以将流媒体视频的末位I帧作为与第一时间点距离最近的关键I帧。可以理解的是,末位I帧在第一时间点之后。
在获取第一时间点与距离最近的关键I帧之间的时间差之后,可以进一步确定第一时间点与最近I帧的时间差与最大间隔阈值的大小关系。
在一些可能实现方式中,第一时间点与最近I帧的时间差与最大间隔阈值的大小关系,可以通过将第一时间点与最近I帧的时间差与最大间隔阈值进行比较。示例性地,假设第一预设比例取1/100,相应地可以判断第一时间差是否小于L×1/100。
其中,为了便于说明,可以将第一时间点称为seek操作点,将seek操作的场景称为seek场景,将第二时间点称为seek定位点。
第一场景:假设第一时间点位于流媒体视频的开头片段,该开头片段对应的seek模式包括SEEK_PREVIOUS_SYNC模式,以及SEEK_CLOSEST模式。在第一时间点位于流媒体视频的开头片段之后,获取第一时间点与距离最近的首位I帧之间的时间差ΔT,然后判断时间差ΔT是否大于或等于最大间隔阈值,具体判断结果可能存在如下两种情况:
情况一:第一时间差小于最大间隔阈值(例如L×1/100)。据此可以认为,当前seek场景中seek操作点与最近I帧相对较近,可以选择SEEK_PREVIOUS_SYNC模式进行最近I帧定位。通过采用SEEK_PREVIOUS_SYNC模式,可以将视频定位到该最近I帧,从该最近I帧开始播放。
情况二:第一时间差大于或等于最大间隔阈值(例如L×1/100)。据此可以认为,当前seek场景中seek操作点与最近I帧相对较远,可以选择SEEK_CLOSEST模式进行精准定位。通过采用SEEK_CLOSEST模式,可以将视频定位到与seek操作点最近的一个视频帧,从最近的该视频帧开始播放;其中,该视频帧可能是I帧,也可能是B帧,还可能是P帧,具体可以根据实际情况确定。
需要说明的是,对于SEEK_CLOSEST模式,如果定位到的视频帧是B帧或者P帧,而不是I帧,那么需要对定位到的B帧或者P帧进行解码,由于对B帧或者P帧属于预测帧,其解码需要借助于关键I帧,因此该情况下定位所需耗时相对较长。
第二场景:假设第一时间点位于流媒体视频的中间片段,该中间片段对应的seek模式包括SEEK_CLOSEST_SYNC模式,以及SEEK_CLOSEST模式。在第一时间点位于流媒体视频的中间片段之后,获取第一时间点与距离最近的I帧之间的时间差ΔT,然后判断时间差ΔT是否大于或等于最大间隔阈值,具体判断结果可能存在如下两种情况:
情况一:第一时间差小于最大间隔阈值(例如L×1/100)。据此可以认为,当前seek场景中seek操作点与最近I帧相对较近,可以选择SEEK_CLOSEST_SYNC模式进行最近I帧定位。通过采用SEEK_CLOSEST_SYNC模式,可以将视频定位到与seek操作点距离最近的I帧,从该最近I帧开始播放。其中,此处定位到与seek操作点距离最近的I帧,可能在seek操作点之前,也可能在seek操作点之后,具体可以根据实际情况确定。
情况二:第一时间差大于或等于最大间隔阈值(例如L×1/100)。据此可以认为,当前seek场景中seek操作点与最近I帧相对较远,可以选择SEEK_CLOSEST模式进行精准定位。通过采用SEEK_CLOSEST模式,可以将视频定位到与seek操作点最近的一个视频帧,从最近的该视频帧开始播放,其中该视频帧可能是I帧,也可能是B帧,还可能是P帧,具体可以根据实际情况确定。
第三场景:假设第一时间点位于流媒体视频的结尾片段,该结尾片段对应的seek模式包括SEEK_NEXT_SYNC模式,以及SEEK_CLOSEST模式。在第一时间点位于流媒体视频的结尾片段之后,获取第一时间点与距离最近的末位I帧之间的时间差ΔT,然后判断时间差ΔT是否大于或等于最大间隔阈值,具体判断结果可能存在如下两种情况:
情况一:第一时间差小于大于或等于最大间隔阈值(例如L×1/100)。据此可以认为,当前seek场景中seek操作点与最近末位I帧相对较近,可以选择SEEK_NEXT_SYNC模式进行最近I帧定位。通过采用SEEK_NEXT_SYNC模式,可以将视频定位到与seek操作点距离最近的末位I帧,从该最近末位I帧开始播放。
情况二:第一时间差大于或等于大于或等于最大间隔阈值(例如L×1/100)。据此可以认为,当前seek场景中seek操作点与最近I帧相对较远,可以选择SEEK_CLOSEST模式进行精准定位。通过采用SEEK_CLOSEST模式,可以将视频定位到与seek操作点最近的一个视频帧,从最近的该视频帧开始播放,其中该视频帧可能是I帧,也可能是B帧,还可能是P帧,具体可以根据实际情况确定。
由此根据第一时间点在流媒体视频中的位置,以及第一时间点与最近I帧的时间差与最大间隔阈值的比较结果,从预设的多个seek模式中选择出适合当前seek场景的seek模式,在通过所选seek模式进行最近I帧定位时,可以使得进度条拖动后的视频定位所需耗时短,而在通过所选seek模式进行精准定位时,可以使得视频定位更加准确,由此可以提升进度条拖动效果,提升用户在拖动进度条后的观影体验。
在实际实现时,对于MP4类视频来说,可以快速地解析出H264/H265视频的IBP帧的分布情况以及视频总长度等信息,根据这些信息以及要seekTo的位置,可以选择速度最快,体验最好的seek模式。下面以最大间隔阈值为1/100为例,示例性地描述本申请方案的具体规则:
其中,第一时间点离最近I帧的距离(即时间差)采用ΔT表示,视频总长度采用T表示。
一方面,当ΔT<1/100*T时,可以使用SEEK_NEXT_SYNC模式、SEEK_PREVIOUS_SYNC模式、或者SEEK_CLOSEST_SYNC模式快速搜索并跳转。
若seekTo到视频开头片段或区域中,且ΔT<1/100*T,则选择SEEK_PREVIOUS_SYNC模式。
若seekTo到视频结尾片段或区域中,且ΔT<1/100*T,则选择SEEK_NEXT_SYNC模式。
若seekTo到视频中间片段或区域中,且ΔT<1/100*T,则选择SEEK_CLOSEST_SYNC模式。
另一方面,当ΔT≥1/100*T时,则需要跳转到精准的位置,由于第一时间点之前或之后没有合适的I帧能够直接跳转,因此使用SEEK_CLOSEST模式进行精准定位。
从上述角度来看,1/100*T从整体上可以理解为精准seek的最大间隔阈值。若ΔT大于或等于该最大间隔阈值,则选择精准seek,即选择SEEK_CLOSEST模式。若ΔT小于该最大间隔阈值,则选择非精准seek,例如选择SEEK_PREVIOUS_SYNC模式,SEEK_NEXT_SYNC模式,SEEK_CLOSEST_SYNC模式或者SEEK_CLOSEST模式;具体选择哪一种seek模式根据指定时间点在流媒体视频中的位置情况确定,上述实施例已经描述,此处不再赘述。
具体地,当seek操作点距离关键帧的间隔ΔT较小,没有超过最大间隔阈值时,播放器会选择精准seek,即选择SEEK_CLOSEST模式。当seek操作点距离关键帧的间隔ΔT过大,超过最大间隔阈值时,播放器会自动切换成非精准seek,即选择SEEK_NEXT_SYNC模式、SEEK_PREVIOUS_SYNC模式、或者SEEK_CLOSEST_SYNC模式,在此情况下进度条回跳或后跳。
需要说明的是,以上实施例中以快进或快退操作触发seek定位,在实际实现时,本申请方案还可以应用于其他需要seek的场景。例如,当用户从后台恢复播放时,需要跳转到之前退出的时间点继续播放。在暂停时保存进度参数;恢复播放时,调用seekTo方法,传入进度参数进行seek定位。此时也可能存在恢复播放时位置不准的问题。这种情况也可以采用本申请实施例提供的方法,具体实现方式可以参照上述实施例。
以上实施例说明了本申请实施例提供的流媒体视频的seek处理方法的可能实现方式,下面结合附图说明媒体播放器MediaPlayer中涉及到调用seekTo()函数的状态。
图11示出了媒体播放器MediaPlayer的生命周期的示意图。如图11所示,媒体播放器MediaPlayer的生命周期可以包括:空闲(idle)状态、初始化(initialized)状态、就绪(prepared)状态、准备中(preparing)状态、开始(started)状态、停止(stop)状态、暂停(paused)状态、播放完毕(playback completed)状态,以及错误状态和结束状态。下面对媒体播放器MediaPlayer的生命周期中的各个状态进行说明。
1)空闲状态,也称为闲置状态,是一个生命周期的开始。
在使用创建new MediaPlayer()方法,或者任何其他状态调用了reset()方法之后,进入空闲状态。
2)结束状态是一个生命周期的结束。
在空闲状态调用release()方法后,会释放资源,进入结束状态。
3)错误状态用于指示播放器引擎内部发生的错误。
当检测到异常时,系统回调onError()方法进入错误状态。例如,注册一个OnErrorListener重写onError()方法,以用于获取播放器引擎内部发生的错误。另外,在处于错误状态时,可以使用reset()方法回到空闲状态。
4)初始化状态用于指示已完成设置播放文件。
在空闲状态调用setDataSource()方法,媒体播放器MediaPlayer会迁移到初始化状态。
5)就绪状态用于指示已完成准备。
6)准备中状态用于指示处于准备中。
一种方式为,初始化状态调用prepare()方法进入就绪状态。
另一种方式为,初始化状态调用prepareAsync()方法进入准备中状态,注册OnPreparedListener.OnPrepared()方法。
7)开始状态用于指示开始播放。
就绪状态调用start()方法进入开始状态。
8)停止状态
如果在就绪状态、开始状态、暂停状态或播放完毕状态下,调用stop()方法,那么媒体播放器MediaPlayer将会迁移到停止状态。
9)暂停状态
如果开始状态调用pause()方法,那么进入暂停状态。如果暂停状态调用start()方法,那么进入开始状态。
10)播放完毕状态
如果设置了SetLooping()方法,那么播放完毕之后会重新进入开始状态。如果没有设置循环模式,则调用完成OnCompletion.onCompletion()回调方法,媒体播放器MediaPlayer会进入播放完毕状态。
上述各个状态可以采用各不同函数方法进行切换。例如,采用setDataSource()方法进入初始化状态,采用prepareAsync()方法从初始化状态切换至就绪状态,采用start()从就绪状态切换至开始状态,采用stop()从开始状态切换至停止状态,采用release()从停止状态切换至结束状态。
需要说的是,在开始播放视频之前,媒体播放器MediaPlayer对象需要进入Prepared状态,提供了两种方法(同步和异步)使MediaPlayer对象进入Prepared状态:
一种是调用prepare()方法(同步),此方法返回就表示该媒体播放器MediaPlayer对象已经进入了Prepared状态。
另一种是调用prepareAsync()方法(异步),此方法会使此媒体播放器MediaPlayer对象进入Preparing状态并返回。
其中,内部的播放引擎会继续未完成的准备工作。当同步版本返回时或异步版本的准备工作完全完成时,就会调用OnPreparedListener.onPrepared()监听方法。
具体到本申请方案,如图11所示,可以在诸如Started状态,Prepared状态,Paused状态,或者PlaybackCompleted状态等各种状态下,调用指定播放位置seekTo()方法,实现本申请上述实施例中提供的方法。通过本申请提供的流媒体视频的seek处理方法,在触发进度条拖动事件后,获取流媒体视频的视频长度以及IBP帧分布情况等数据,分析指定时间点在视频总长度中的位置情况,并分析指定时间点与最近I帧之间的时间差是否大于或等于精准seek的最大间隔阈值,从预设的多个seek模式中选择出适合当前seek场景的seek模式:若时间差大于或等于该最大间隔阈值,则选择精准seek,即采用SEEK_CLOSEST模式;若时间差小于该最大间隔阈值,则选择非精准seek,例如采用SEEK_PREVIOUS_SYNC模式,SEEK_NEXT_SYNC模式,SEEK_CLOSEST_SYNC模式或者SEEK_CLOSEST模式。通过本申请方案,通过选择合适的seek模式进行定位,可以使得进度条拖动后的视频定位所需耗时短,并且使得视频定位更加准确,由此可以提升进度条拖动效果,提升用户在拖动进度条后的观影体验。
也需要说明的是,在本申请实施例中,“大于”可以替换为“大于或等于”,“小于或等于”可以替换为“小于”,或者,“大于或等于”可以替换为“大于”,“小于”可以替换为“小于或等于”。
本文中描述的各个实施例可以为独立的方案,也可以根据内在逻辑进行组合,这些方案都落入本申请的保护范围中。
可以理解的是,上述各个方法实施例中由电子设备实现的方法和操作,也可以由可用于电子设备的部件(例如芯片或者电路)实现。
上文描述了本申请提供的方法实施例,下文将描述本申请提供的装置实施例。应理解,装置实施例的描述与方法实施例的描述相互对应,因此,未详细描述的内容可以参见上文方法实施例,为了简洁,这里不再赘述。
上文主要从方法步骤的角度对本申请实施例提供的方案进行了描述。可以理解的是,为了实现上述功能,实施该方法的电子设备包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的保护范围。
本申请实施例可以根据上述方法示例,对电子设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有其它可行的划分方式。下面以采用对应各个功能划分各个功能模块为例进行说明。
图12为本申请实施例提供的流媒体视频的seek处理装置300的示意性框图。该装置300可以用于执行上文方法实施例中电子设备所执行的动作。该装置300包括接收单元310和处理单元320。
接收单元310,用于接收对流媒体视频的定位seek操作。
处理单元320,用于响应于对流媒体视频的定位seek操作,确定seek操作对应的第一时间点;根据第一时间点和流媒体视频的视频总长度,确定第一时间点位于流媒体视频的第一时间段内;确定第一时间点与第一帧之间的第一时间差,第一帧为流媒体视频中与第一时间点距离最近的关键I帧;当第一时间差与视频总长度之间的比例小于第一预设比例时,确定第一seek模式作为目标seek模式,第一seek模式为与第一时间段对应的seek模式;或者,当第一时间差与视频总长度之间的比例大于或等于第一预设比例时,确定第二seek模式作为目标seek模式;采用目标seek模式,定位到流媒体视频的第二时间点;从第二时间点开始播放流媒体视频;其中,第一seek模式为SEEK_PREVIOUS_SYNC模式,SEEK_NEXT_SYNC模式,或者SEEK_CLOSEST_SYNC模式;第二seek模式为SEEK_CLOSEST模式。
通过本申请提供的方案,在触发进度条拖动事件后,获取流媒体视频的视频长度以及IBP帧分布情况等数据,分析指定时间点在视频总长度中的位置情况,并分析指定时间点与最近I帧之间的时间差是否大于或等于精准seek的最大间隔阈值,从预设的多个seek模式中选择出适合当前seek场景的seek模式:若时间差大于或等于该最大间隔阈值,则选择精准seek(即SEEK_CLOSEST模式);若时间差小于该最大间隔阈值,则选择非精准seek。通过本申请方案,通过选择合适的seek模式进行定位,可以使得进度条拖动后的视频定位所需耗时短,并且使得视频定位更加准确,由此可以提升进度条拖动效果,提升用户在拖动进度条后的观影体验。
根据本申请实施例的装置300可对应于执行本申请实施例中描述的方法,并且装置300中的单元的上述和其它操作和/或功能分别为了实现方法的相应流程,为了简洁,在此不再赘述。
本申请还提供一种芯片,该芯片与存储器耦合,该芯片用于读取并执行存储器中存储的计算机程序或指令,以执行上述各实施例中的方法。
本申请还提供一种电子设备,该电子设备包括芯片,该芯片用于读取并执行存储器存储的计算机程序或指令,使得各实施例中的方法被执行。
本实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行上述相关方法步骤实现上述实施例中的流媒体视频的seek处理方法。
本实施例还提供了一种计算机程序产品,该计算机可读存储介质存储有程序代码,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的流媒体视频的seek处理方法。
另外,本申请的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的流媒体视频的seek处理方法。
其中,本实施例提供的电子设备、计算机可读存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (15)

1.一种流媒体视频的seek处理方法,其特征在于,包括:
响应于对流媒体视频的定位seek操作,确定所述seek操作对应的第一时间点;
根据所述第一时间点和所述流媒体视频的视频总长度,确定所述第一时间点位于所述流媒体视频的第一时间段内;
确定所述第一时间点与第一帧之间的第一时间差,所述第一帧为所述流媒体视频中与所述第一时间点距离最近的关键I帧;
当所述第一时间差与所述视频总长度之间的比例小于第一预设比例时,确定第一seek模式作为目标seek模式,所述第一seek模式为与所述第一时间段对应的seek模式;或者,
当所述第一时间差与所述视频总长度之间的比例大于或等于第一预设比例时,确定第二seek模式作为所述目标seek模式;
采用所述目标seek模式,定位到所述流媒体视频的第二时间点;
从所述第二时间点开始播放所述流媒体视频;
在所述目标seek模式为所述第一seek模式的情况下,所述第二时间点处的视频帧为与所述第一时间点距离最近的I帧;
在所述目标seek模式为所述第二seek模式的情况下,所述第二时间点处的视频帧为与所述第一时间点距离最近的I帧或者B帧或者P帧;
其中,所述第一seek模式为SEEK_PREVIOUS_SYNC模式,SEEK_NEXT_SYNC模式,或者SEEK_CLOSEST_SYNC模式;第二seek模式为SEEK_CLOSEST模式。
2.根据权利要求1所述的方法,其特征在于,所述第一时间段为所述流媒体视频的开头片段,或者中间片段,或者结尾片段;其中,不同的第一时间段对应不同的seek模式。
3.根据权利要求1或2所述的方法,其特征在于,
当所述第一时间点在所述流媒体视频的开头片段时,所述第一帧为所述流媒体视频的首位I帧,所述第一帧位于所述第一时间点之前;或者,
当所述第一时间点在所述流媒体视频的中间片段时,所述第一帧位于所述第一时间点之前或者之后;或者,
当所述第一时间点在所述流媒体视频的结尾片段时,所述第一帧为所述流媒体视频的末位I帧,所述第一帧位于所述第一时间点之后。
4.根据权利要求3所述的方法,其特征在于,在所述第一时间段为所述流媒体视频的开头片段的情况下,与所述第一时间段对应的第一seek模式预设为SEEK_PREVIOUS_SYNC模式;
其中,所述当所述第一时间差与所述视频总长度之间的比例小于所述第一预设比例时,确定第一seek模式作为目标seek模式,包括:
当所述第一时间差与所述视频总长度之间的比例小于所述第一预设比例时,确定所述SEEK_PREVIOUS_SYNC模式作为所述目标seek模式。
5.根据权利要求3所述的方法,其特征在于,在所述第一时间段为所述流媒体视频的中间片段的情况下,与所述第一时间段对应的第一seek模式预设为SEEK_CLOSEST_SYNC模式;
其中,所述当所述第一时间差与所述视频总长度之间的比例小于所述第一预设比例时,确定第一seek模式作为目标seek模式,包括:
当所述第一时间差与所述视频总长度之间的比例小于所述第一预设比例时,确定所述SEEK_CLOSEST_SYNC模式作为所述目标seek模式。
6.根据权利要求3所述的方法,其特征在于,在所述第一时间段为所述流媒体视频的结尾片段的情况下,与所述第一时间段对应的第一seek模式预设为SEEK_NEXT_SYNC模式;
其中,所述当所述第一时间差与所述视频总长度之间的比例小于所述第一预设比例时,确定第一seek模式作为目标seek模式,包括:
当所述第一时间差与所述视频总长度之间的比例小于所述第一预设比例时,确定所述SEEK_NEXT_SYNC模式作为所述目标seek模式。
7.根据权利要求1、2、4至6中任一项所述的方法,其特征在于,所述根据所述第一时间点和所述流媒体视频的视频总长度,确定所述第一时间点位于所述流媒体视频的第一时间段内,包括:
当所述第一时间点对应的第一时间段与所述视频总长度之间的比例小于第二预设比例时,确定所述第一时间点位于所述流媒体视频的开头片段内,所述第一时间段为所述流媒体视频从头开始到所述第一时间点之间的时长;或者,
当所述第一时间段与所述视频总长度之间的比例大于或等于所述第二预设比例且小于第三预设比例时,确定所述第一时间点位于所述流媒体视频的中间片段内;或者,
当所述第一时间段与所述视频总长度之间的比例大于或等于所述第三预设比例时,确定所述第一时间点位于所述流媒体视频的结尾片段内;
其中,所述第二预设比例小于所述第三预设比例,所述第二预设比例和所述第三预设比例大于所述第一预设比例。
8.根据权利要求1、2、4至6中任一项所述的方法,其特征在于,所述确定所述第一时间点与第一帧之间的第一时间差,包括:
从缓存区中获取所述流媒体视频的视频帧分布数据和视频帧时间数据;
根据所述第一时间点、所述视频帧分布数据以及所述视频帧时间数据,确定所述第一时间点与所述第一帧之间的所述第一时间差;
其中,所述视频帧分布数据用于表示I帧、B帧和P帧的分布情况,所述视频帧时间数据包括所述流媒体视频中每一帧的显示时间戳PTS。
9.根据权利要求8所述的方法,其特征在于,在所述获取视频帧分布数据和视频帧时间数据之前,所述方法还包括:
获取所述流媒体视频的视频轨道数据;
根据所述视频轨道数据,确定所述视频帧分布数据和所述视频帧时间数据;
在所述缓存区中缓存所述视频帧分布数据和所述视频帧时间数据。
10.根据权利要求1、2、4至6、9中任一项所述的方法,其特征在于,所述确定目标seek模式的过程是通过调用SeekTo函数完成的,所述SeekTo函数为预设的自适应定位SEEK_AUTO函数。
11.根据权利要求1、2、4至6、9中任一项所述的方法,其特征在于,在所述响应于对流媒体视频的定位seek操作,确定所述seek操作对应的第一时间点之前,所述方法还包括:
接收用户在所述流媒体视频的播放界面上的第一操作,所述第一操作为触发所述流媒体视频快进播放或者快退播放的操作;
其中,所述第一操作为对所述流媒体视频的seek操作。
12.根据权利要求1、2、4至6、9中任一项所述的方法,其特征在于,在所述采用所述目标seek模式,定位到所述流媒体视频的第二时间点之后,所述方法还包括;
在显示屏上更新显示所述流媒体视频的进度条;
其中,所述进度条对应的当前播放位置从所述第一时间点跳转到所述第二时间点。
13.根据权利要求1、2、4至6、9中任一项所述的方法,其特征在于,所述从所述第二时间点开始播放所述流媒体视频,包括:
对所述第二时间点处的帧数据进行解码,得到解码后的帧数据;
播放所述解码后的帧数据;
其中,所述第二时间点处的帧数据为I帧或者B帧或者P帧。
14.一种电子设备,其特征在于,包括处理器,所述处理器与存储器耦合,所述处理器用于执行所述存储器中存储的计算机程序或指令,以使得所述电子设备实现如权利要求1至13中任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,当所述计算机程序在电子设备上运行时,使得所述电子设备执行如权利要求1至13中任一项所述的方法。
CN202211183037.3A 2022-09-27 2022-09-27 流媒体视频的seek处理方法、电子设备及存储介质 Active CN116684515B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211183037.3A CN116684515B (zh) 2022-09-27 2022-09-27 流媒体视频的seek处理方法、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211183037.3A CN116684515B (zh) 2022-09-27 2022-09-27 流媒体视频的seek处理方法、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN116684515A CN116684515A (zh) 2023-09-01
CN116684515B true CN116684515B (zh) 2024-04-12

Family

ID=87787845

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211183037.3A Active CN116684515B (zh) 2022-09-27 2022-09-27 流媒体视频的seek处理方法、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN116684515B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105828109A (zh) * 2015-11-20 2016-08-03 广东亿迅科技有限公司 服务器、客户端及基于rtsp/rtp的播放系统
CN107509086A (zh) * 2017-09-06 2017-12-22 成都虫洞奇迹科技有限公司 一种云桌面下的视频重定向方法及装置
CN108076377A (zh) * 2017-12-26 2018-05-25 浙江大华技术股份有限公司 一种视频的存储、播放方法、装置、电子设备及存储介质
US10638180B1 (en) * 2018-07-20 2020-04-28 Amazon Technologies, Inc. Media timeline management
CN111432254A (zh) * 2020-03-24 2020-07-17 杭州海康威视数字技术股份有限公司 视频信息显示方法及装置
US11227637B1 (en) * 2021-03-31 2022-01-18 Snap Inc. Synchronizing multiple images or videos to an audio track
EP3968647A1 (en) * 2020-01-17 2022-03-16 Beijing Dajia Internet Information Technology Co., Ltd. Media stream transmission method and system
CN114786065A (zh) * 2022-03-29 2022-07-22 广州埋堆堆科技有限公司 一种基于FFmpeg的HLS视频播放进度精准切换方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10536741B1 (en) * 2018-10-19 2020-01-14 Philo, Inc. Synchronizing internet (“over the top”) video streams for simultaneous feedback
CN112995759A (zh) * 2019-12-13 2021-06-18 腾讯科技(北京)有限公司 互动业务处理方法、系统、装置、设备及存储介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105828109A (zh) * 2015-11-20 2016-08-03 广东亿迅科技有限公司 服务器、客户端及基于rtsp/rtp的播放系统
CN107509086A (zh) * 2017-09-06 2017-12-22 成都虫洞奇迹科技有限公司 一种云桌面下的视频重定向方法及装置
CN108076377A (zh) * 2017-12-26 2018-05-25 浙江大华技术股份有限公司 一种视频的存储、播放方法、装置、电子设备及存储介质
US10638180B1 (en) * 2018-07-20 2020-04-28 Amazon Technologies, Inc. Media timeline management
EP3968647A1 (en) * 2020-01-17 2022-03-16 Beijing Dajia Internet Information Technology Co., Ltd. Media stream transmission method and system
CN111432254A (zh) * 2020-03-24 2020-07-17 杭州海康威视数字技术股份有限公司 视频信息显示方法及装置
US11227637B1 (en) * 2021-03-31 2022-01-18 Snap Inc. Synchronizing multiple images or videos to an audio track
CN114786065A (zh) * 2022-03-29 2022-07-22 广州埋堆堆科技有限公司 一种基于FFmpeg的HLS视频播放进度精准切换方法

Also Published As

Publication number Publication date
CN116684515A (zh) 2023-09-01

Similar Documents

Publication Publication Date Title
CN108737908B (zh) 一种媒体播放方法、装置及存储介质
US20220147207A1 (en) Application Quick Start Method and Related Apparatus
CN106559697B (zh) 一种基于pvr机顶盒的录制文件封面显示方法及系统
KR101756044B1 (ko) 비디오 특수 효과 처리 방법, 장치, 단말 기기, 프로그램 및 기록매체
US8737807B2 (en) Reproduction apparatus and image-capturing apparatus
CN111601136B (zh) 一种视频数据处理方法、装置、计算机设备及存储介质
US20230119300A1 (en) Method for Resuming Playing Multimedia Content Between Devices
WO2014209264A1 (en) Techniques and system for multiple display media presentations
CN106454413A (zh) 直播编码切换方法、装置及设备
KR20140010337A (ko) 전자기기 및 그 제어방법
KR20130137632A (ko) 비디오 시스템에서 의미 기반 트릭 모드 플레이를 위한 방법
CN110771175A (zh) 视频播放速度的控制方法、装置及运动相机
WO2012092725A1 (zh) 视频播放时快进快退处理方法、装置以及移动终端
US8391688B2 (en) Smooth rewind media playback
JP7312852B2 (ja) ビデオ処理方法及び装置、端末、及びコンピュータプログラム
CN112153396A (zh) 页面展示方法、装置、系统和存储介质
CN116684515B (zh) 流媒体视频的seek处理方法、电子设备及存储介质
CN109005455B (zh) 视频数据处理方法及装置
WO2023036007A1 (zh) 一种获取图像的方法及电子设备
CN114827454A (zh) 视频的获取方法及装置
WO2022193141A1 (zh) 多媒体文件的播放方法及相关装置
CN113709574B (zh) 视频截图方法、装置、电子设备及计算机可读存储介质
CN116939212A (zh) 视频处理方法、装置、计算机可读存储介质及计算机设备
CN114339419A (zh) 一种视频流拉流处理的方法、装置及存储介质
CN114025170A (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