在线视频(音频)播放
在线视频(音频)播放
为了减少视频展示类Case场景包的大小提升加载速度,使内容展示更灵活,DuMix AR支持网络地址视频以及音频的播放,开发者可以在自己的项目中配置网络视频链接,如电台链接、网络电视地址、直播视频(HLS)等,并提供了音视频缓冲状态、播放状态、播放进度等状态回调和接口查询,开发者可以根据自己的业务灵活配置相应的事件响应。
Sample case: 代码下载
播放在线视频和在线音频的接口使用原理是一致的,下面以播放在线视频为例提出几点在API使用上以及能力应用上需要注意的地方。
API接口
from_time:设置视频从哪个位置开始播放,单位毫秒。例如:from_time(5000)意为从视频5s处开始播放。
is_remote:是否是网络视频,0为本地视频,1为网络视频。
call_back:传给Lua层视频播放器信息的回调,包含四个字段:action_id、platform、type、data,其中data字段中包含另外的5个字段:error_code、buffer_status、buffer_progress、play_status、play_progress。
get_video_play_info:查询视频播放信息。
注意:
- API接口详解
- callback接口在播放视频、暂停视频和停止视频等事件发生变化的时候都会相应发生变化,只要调用了这个接口并且没有停止/暂停播放,会一直返回需要返回的播放器信息。
- get_viedo_play_info接口可根据项目需求主动获取和查询当前播放器的状态,并根据这些状态做相应的逻辑处理。
其中:
video_info = video_id:get_video_play_info ()
duration=video_info['duration']
当应用场景为播放直播视频或者其他不可预计时间的视频时,从字典中获取的视频总时长会为0或者-1。
应用
视频要求
播放在线视频的视频源需要符合以下规范:
1、分辨率:整体宽不超过1920&高不超过1080,且宽&高皆为8的倍数。
2、支持视频格式为MP4或者HLS的ts流的在线视频。
3、编码格式最好为H264。
4、直播类视频仅支持HLS协议。
音频要求
音频源格式为MP3。
能力使用
video_id = scene.videoPlane1:video()
:path('http://ar-fm.cdn.bcebos.com/ar-website%2FARcasejinji12-21.mp4')
:from_time(0)
:repeat_count(1)
:is_remote(1)
:on_complete(function ()
end)
:start()
与播放本地视频一样,首先需新建一个节点播放器videoPlane1,地址为一个在线播放视频链接,is_remote字段为1表示播放在线视频且播放在线视频时该字段必须设置为1。
Video.call_back = function(data)
play_status = data['data']['play_status']
ARLOG("play_status:"..play_status)
--首次进入,播放状态是准备成功时,先暂停
if(tostring(play_status) == "1")then
if(clickNUM==0)then
video_id:pause()
clickNUM=1
end
end
--获取视频的播放进度
msg_id = data['data']['play_progress']
ARLOG("progress:"..msg_id)
end
play_status和play_progress为data表中的字段,该字段返回的是播放器状态和播放进度,同样从data['platform']、data['type']等字段中可以得到播放器的平台和信息。
示例中获取了播放器状态,1表示准备成功,准备成功后判断是否为首次进入AR,是的话先暂停播放视频并改变标记状态,在后面需要播放视频的时候再调用video_id:start()播放。
video_info = video_id:get_video_play_info()
for key,value in pairs(video_info) do
ARLOG(key.." :"..tostring(value))
end
buffer_status=video_info['buffer_progress']
if(tostring(buffer_progress)=="100")then
scene.fengmian:set_visible(false)
end
get_video_play_info可以在需要查询播放器状态的地方使用,既可以遍历获取所有开放的信息,也可以单独取出其中的某个字段,如示例代码,当视频缓冲完成时隐藏封面图片准备播放视频。