openPlayer
addEventListener
hidePlayer
showPlayer
closePlayer
setVideoDatas
addVideoDatas
delVideoByIndex
setLikeCount
setCommonCount
setShareCount
play
pause
replay
getDuration
getVideoSize
seekTo
getCurrentPosition
getCurrentPlayState
getVideoCountsAndDataByIndex
setVolume
doScreenShot
clearCache
playNext
playPrevious
本插件通过原生代码实现了抖音上下滑动播放视频的功能,无论是界面还是用户操作产生的动画都和抖音一样,开发者只要几行代码就可以轻松实现抖音的界面和功能,方便快捷。内核采用现今最流行的IJKPlayer播放器实现,该播放器快速高效,在播放视频和直播方面具有很好的表现。界面上,用户可以无限循环上下滑动,同时本插件也开放了对各个功能区域的可见性控制,比如关注、点赞、分享、评论、音乐动画、跑马灯文字等等功能区域,开发者都可以通过参数控制这些区域的可见性,实现纯视频模式和视频+功能区域之间的切换,目前插件只支持Android平台,后续会上线IOS平台。本插件中约定,参数中返回的status值为0或1,1代表成功,0代表失败。
① 高仿抖音主视频播放界面;
② 向上或向下滑动无限循环轮播视频;
③ 可单独设置评论数量、点赞数量、分享数量;
④ 可设置各个功能区域是否可见;
⑤ 开发者可在插件上层增加一层透明的frame或window,用于自定义界面,响应用户的交互请求;
开发中大部分情况下我们需要缓存视频、图片,本插件实现了视频加载缓存和图片三级缓存。用户打开视频后,上下两个视频就已经加载好了,此时用户向上或者向下滑动后视频就立即可以播放,减少了用户等待的时间,大大增加了用户体验。加载网络图片后,插件会把图片缓存到内存,同时把图片缓存文件存到手机自带的sd卡。 再次加载图片时插件会先从内存找,如果找到则马上显示在界面上,如果内存没有则从sd卡查找图片缓存文件加载显示,再没有才从网络加载显示,三级缓存大大节省了用户的手机流量,相对js代码更具高效性,切换更加流畅,大大降低了app内存占用率。
Widget示例代码及体验apk下载地址:https://community.yonyou.com/thread-163621-1-1.html
打开播放器。注意该方法为耗时方法,若视频数量较多,建议做用户等待处理,直至该方法返回。
openPlayer({params},callback(ret))
videos:
videos: [
{
vid : new Date().getTime()+0,
isAutoPlay:true,//是否自动播放,默认true
isLooping:true,//同一视频播放完后是否自动重播,默认true。注意该值为false时才会接收到"onCompletion"事件,否则接收不到。
videoUrl : 'http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4',//视频url地址
authorHeadUrl:"https://p9-dy.byteimg.com/aweme/100x100/2414900010229a84b01eb.jpeg",//作者头像,默认插件中的头像
isFollowed:false,//是否已经关注,默认false
authorNameFormatStr:"宇妈艺博",//作者名字
isLike:false,//是否已经点赞,默认false
likeCount:"2.5w",//点赞数量,字符串类型,默认""
commonCount:"5695",//评论数量,字符串类型,默认""
shareCount:"3.8w",//分享数量,字符串类型,默认""
musicImgUrl:"https://p9-dy.byteimg.com/aweme/100x100/2414900010229a84b01eb.jpeg",//音乐动画区域内部的图片地址、支持http、https格式,一般设置成作者头像,即与authorHeadUrl的值相同。
videoTitle:"你好 重新认识一下 我姓 #宦 @身高162 体重90 #性格阳光开朗 15687985462 唯独对你迷茫(太久没玩抖音的人非主流独白)",//视频标题区域的文字
marqueeText:"@宇妈艺博创作的原声 宇妈艺博创作的原声 宇妈艺博创作的原声",//跑马灯区域的文字,注意这里的文字要超过一行才能有文字从左到右的动画产生。
previewImg :'http://p9-dy.byteimg.com/large/tos-cn-p-0015/0dab3107ddf64793b8329fecdb3945c6_1575388895.jpeg?from=2563711402_large',//视频缩略图,仅支持http格式
placeHolderColor:"#000000",//视频加载成功前播放器的背景颜色,当previewImg为空时或者previewImg不为空但placeHolderImg为空时,该值有效。默认为插件的渐变颜色
imageScaleType:1,//数字型,取值范围1(默认)、2、3,该值用于设置previewImg和placeHolderImg这两个值所包含的图片的在播放器区域的显示方式。1:以可能裁切掉部分图片为代价,让图片充满整个播放器区域,图片不会变形,建议采用该模式;2:按照图片比例伸缩且保证图片完整显示,播放器的宽或高总有一个不会被图片充满,图片不会变形;3:以不按图片原比例伸缩为代价,强制让图片充满整个播放器区域,图片会变形。
videoScaleType:0,//数字型,取值范围0到5,默认0,该值用于设置视频的宽高显示模式。0:SCREEN_SCALE_DEFAULT ;1:SCREEN_SCALE_16_9 ; 2:SCREEN_SCALE_4_3 ; 3:SCREEN_SCALE_MATCH_PARENT ; 4:SCREEN_SCALE_ORIGINAL ; 5:SCREEN_SCALE_CENTER_CROP
},
...
placeHolderImg:
videoBgImg:
musicBgImg:
backBtnImg:
shareBtnImg:
commonBtnImg:
startPlayIndex:
fixedOn:
fixed:
visibility:
visibility:{//功能按钮或文字区域是否显示,以下各个值默认都为true
authorHead:false,//作者头像区域是否显示
like:false,//点赞区域是否显示
common:false,//评论区域是否显示
share:false,//分享区域是否显示
music:false,//音乐动画区域是否显示
authorName:false,//作者名字区域是否显示
vedioTitle:false,//title区域是否显示
marqueeText:false,//向左移动的文字区域是否显示
mutilClick:false,//连续多次点击视频是否出现点赞动画
click:false,//单击视频是否出现暂停/播放按钮
back:false,//返回按钮是否显示
}
rect:
rect : {
x : 0,//默认0
y : 250,//默认0
//w :,//默认填充整个屏幕的宽度
h : 200//默认填充整个屏幕的高度
}
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "视频数据错误", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.openPlayer({
videos : [
{
vid : new Date().getTime()+0,
videoUrl : 'http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4',
authorHeadUrl:"https://p9-dy.byteimg.com/aweme/100x100/2414900010229a84b01eb.jpeg",
authorNameFormatStr:"驚奇隊長",
likeCount:"2.5w",
commonCount:"5695",
shareCount:"3.8w",
musicImgUrl:"https://p9-dy.byteimg.com/aweme/100x100/2414900010229a84b01eb.jpeg",
videoTitle:"《惊奇队长》是由美国漫威影业公司出品的科幻电影,由 @安娜波顿执导 , #布丽拉尔森 、塞缪尔杰克逊、本门德尔森联袂出演。",
marqueeText:"@驚奇隊長创作的原声 驚奇隊長创作的原声 驚奇隊長创作的原声",
previewImg :'https://wx2.sinaimg.cn/large/006sxID6gy1ghqg72ui5uj30rs0bkjy6.jpg',//视频缩略图,仅支持http格式
},
{
vid : new Date().getTime()+1,
videoUrl : 'http://vfx.mtime.cn/Video/2019/03/17/mp4/190317150237409904.mp4',
authorHeadUrl:"https://p3-dy.byteimg.com/aweme/100x100/172a100055311f7013656.jpeg",
authorNameFormatStr:"明日战记",
likeCount:"2.5w",
commonCount:"5695",
shareCount:"3.8w",
musicImgUrl:"https://p3-dy.byteimg.com/aweme/100x100/172a100055311f7013656.jpeg",
videoTitle:"2055年 #地球 @深受污染 ,一颗陨石击中地球,带来一种快速生长的触须类外星生物,它在净化地球的同时,也在杀死一切生命。",
marqueeText:"@明日战记创作的原声 明日战记创作的原声 明日战记创作的原声 ",
},
{
vid : new Date().getTime()+2,
videoUrl : 'https://aweme.snssdk.com/aweme/v1/play/?video_id=v0200f040000bnjjktsps0soh5i48l6g&line=0&ratio=540p&watermark=1&media_type=4&vr_type=0&improve_bitrate=0&logo_name=aweme',
authorHeadUrl:"https://p9-dy.byteimg.com/aweme/100x100/2401c00043f8a30ab65bb.jpeg",
authorNameFormatStr:"黄翌宸的妈咪",
likeCount:"2.5w",
commonCount:"5695",
shareCount:"3.8w",
musicImgUrl:"https://p9-dy.byteimg.com/aweme/100x100/2401c00043f8a30ab65bb.jpeg",
videoTitle:"你好,我叫 #宦小明 ,我的朋友叫 @紫雪 , 15687985462 ,邮件 xiaoming@126.com ,主页 http://baidu.com ,谢谢关注!",
marqueeText:"@黄翌宸的妈咪创作的原声 黄翌宸的妈咪创作的原声 黄翌宸的妈咪创作的原声",
previewImg :'http://p1-dy.byteimg.com/large/tos-cn-p-0015/c5d7150e9d474251bff13f61f0427763_1575434894.jpeg?from=2563711402_large',//视频缩略图,仅支持http格式
},
{
vid : new Date().getTime()+3,
videoUrl : 'http://220.161.87.62:8800/hls/0/index.m3u8',
authorHeadUrl:"https://p9-dy.byteimg.com/aweme/100x100/2e4a30006fdc9d81d954e.jpeg",
authorNameFormatStr:"漳浦电视台直播",
likeCount:"2.5w",
commonCount:"5695",
shareCount:"3.8w",
musicImgUrl:"https://p9-dy.byteimg.com/aweme/100x100/2e4a30006fdc9d81d954e.jpeg",
videoTitle:"这是电视台直播,请您收看!",
marqueeText:"@漳浦电视台直播创作的原声 漳浦电视台直播创作的原声 漳浦电视台直播创作的原声 ",
}
],
fixed:false,
/*
visibility:{//功能按钮或文字区域是否显示
authorHead:false,//作者头像区域是否显示
like:false,//点赞区域
common:false,//评论区域
share:false,//分享区域
music:false,//音乐动画区域
authorName:false,//作者名字区域
vedioTitle:false,//title区域
marqueeText:false,//向左移动的文字区域
mutilClick:false,//连续多次点击视频是否出现点赞动画
click:false,//单击视频是否出现暂停/播放按钮
back:false,//返回按钮是否显示
},
*/
},function(ret){
//alert( JSON.stringify(ret));
douYinPlayer.addEventListener(function(ret){
//alert( JSON.stringify(ret));
console.log(JSON.stringify(ret)+"");
//api.toast({ msg: JSON.stringify(ret)+"" });
if(ret.event== "onCompletion"){//一个视频播放完毕,接收到"onCompletion"事件
//以下两行代码为测试playPrevious、playNext两个接口
//douYinPlayer.playPrevious(function(ret, err){});
douYinPlayer.playNext(function(ret, err){});
}
});
});
Android系统
可提供的1.0.0及更高版本
设置播放器的事件监听,该方法建议在openPlayer回调成功后调用。
addEventListener(callback(ret))
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "播放器未打开", //错误信息,status为0时有该字段
"event"://事件名称
"onVideoError",//视频播放错误事件
"onCompletion",//视频播放完成事件,当isLooping为true时,视频播放完毕不会返回该事件,若要返回该事件请将isLooping设置为false。
"onBufferingStart",//视频开始缓冲事件
"onBufferingEnd",//视频缓冲完毕事件
"onPrepared",//视频准备完毕事件,此时视频可以马上播放
"onLongPress",//视频长按事件
"onDoubleTap",//视频双击事件
"onSingleTapConfirmed",//视频单击事件
"onMoveLeft",//左滑事件
"onMoveRight",//右滑事件
"onHeadClick",//头像点击事件
"onFollowBtnClick",//关注按钮点击事件
"onLikeBtnClick",//点赞按钮点击事件
"onCommonBtnClick",//评论按钮点击事件
"onShareBtnClick",//分享按钮点击事件
"onMusicBtnClick",//音乐动画区域点击事件
"onAuthorNameClick",//作者名字区域点击事件
"onVideoTitleClick",//视频标题区域点击事件
"onMarqueeTextClick",//跑马灯文字区域点击事件
"onBackBtnClick",//返回按钮点击事件
"onPageSelected",//页面上下滑动切换事件,这个事件可以获取当前页的index
"curPage":0,//发生事件时的当前页
"itemData":{...}//JSON对象数据,事件发生时的视频数据
"isLike":true,//点赞按钮点击事件发生时有该值,是点赞还是取消点赞
"isFollowed":true,//关注按钮点击事件发生时有该值
"autoLinkMode":"",//视频标题区域点击事件发生时有该值
"Hashtag"//点击话题事件,即点击了以“#”开头的文字,文字内容为matchedText返回的内容
"Mention"//点击"@"事件,即点击了以“@”开头的文字,文字内容为matchedText返回的内容
"Url"//点击http网址事件,即点击了以“http”开头的文字,文字内容为matchedText返回的内容
"Phone"//点击电话号码事件,电话号码为matchedText返回的内容
"Email"//点击电子邮箱事件,电子邮箱为matchedText返回的内容
"matchedText":"",//视频标题区域点击事件发生时有该值,见autoLinkMode参数说明。
}
"Hashtag"//点击话题事件,即点击了以“#”开头的文字,文字内容为matchedText返回的内容
"Mention"//点击"@"事件,即点击了以“@”开头的文字,文字内容为matchedText返回的内容
"Url"//点击http网址事件,即点击了以“http”开头的文字,文字内容为matchedText返回的内容
"Phone"//点击电话号码事件,电话号码为matchedText返回的内容
"Email"//点击电子邮箱事件,电子邮箱为matchedText返回的内容
示例: 你好,我叫 #宦小明 ,我的朋友叫 @紫雪 , 15687985462 ,邮件 xiaoming@126.com ,主页 http://baidu.com ,谢谢关注! 点击以上关键字分别返回: "autoLinkMode","Hashtag","matchedText","#宦小明" "autoLinkMode","Mention","matchedText","@紫雪" "autoLinkMode","Phone","matchedText","15687985462" "autoLinkMode","Email","matchedText","xiaoming@126.com" "autoLinkMode","Url","matchedText","http://baidu.com"
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.addEventListener(function(ret){
//alert( JSON.stringify(ret));
console.log(JSON.stringify(ret)+"");
//api.toast({ msg: JSON.stringify(ret)+"" });
});
Android系统
可提供的1.0.0及更高版本
隐藏播放器,播放器暂时不使用时可隐藏起来,但是如果要永久关闭播放器,要调用closePlayer方法,而不是hidePlayer方法。隐藏后正在播放的视频会暂停。
hidePlayer(callback(ret))
ret:
{
"status": 1, //0或1,1成功,0失败。
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.hidePlayer(function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
显示播放器,通过hidePlayer方法隐藏播放器后,通过showPlayer显示出来。
showPlayer(callback(ret))
ret:
{
"status": 1, //0或1,1成功,0失败。
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.showPlayer(function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
关闭播放器,播放器不使用后一定要调用该方法,以免发生内存泄露。
closePlayer(callback(ret))
ret:
{
"status": 1, //0或1,1成功,0失败。
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.closePlayer(function(ret, err){
alert( JSON.stringify(ret));
});
});
Android系统
可提供的1.0.0及更高版本
重新设置视频列表数据,调用该方法播放器不再保存之前的视频列表数据。该方法必须是调用过openPlayer方法之后才能调用。注意该方法为耗时方法,若视频数量较多,建议做用户等待处理,直至该方法返回。
setVideoDatas({params},callback(ret))
videos:
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "播放器未打开或不可见", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.setVideoDatas({
videos:[
{
vid : new Date().getTime()+0,
videoUrl : 'https://aweme.snssdk.com/aweme/v1/play/?video_id=v0200f570000bnj3usej5ugo4drennlg&line=0&ratio=540p&watermark=1&media_type=4&vr_type=0&improve_bitrate=0&logo_name=aweme',
authorHeadUrl:"https://p9-dy.byteimg.com/aweme/100x100/2dcbc00023ec95f7a0b8f.jpeg",
authorNameFormatStr:"肉丸 (阿楠小跟班)",
likeCount:"2.5w",
commonCount:"5695",
shareCount:"3.8w",
musicImgUrl:"https://p9-dy.byteimg.com/aweme/100x100/2dcbc00023ec95f7a0b8f.jpeg",
videoTitle:"问在座的所有男孩子一个问题,你们知道一个女孩子对哪两个字毫无抵抗力吗? #我要上热门 @抖音小助手 ",
marqueeText:"肉丸 (阿楠小跟班)@完整版网一云_爱吃巧乐兹",
previewImg :'http://p3-dy.byteimg.com/large/tos-cn-p-0015/d5dff40c50d74376b8ad99305685571a_1575370621.jpeg?from=2563711402_large',//视频缩略图,仅支持http格式
},
{
vid : new Date().getTime()+1,
videoUrl : 'https://aweme.snssdk.com/aweme/v1/play/?video_id=v0200f6d0000bn38nkhcgf30cabsvps0&line=0&ratio=540p&watermark=1&media_type=4&vr_type=0&improve_bitrate=0&logo_name=aweme',
authorHeadUrl:"https://p9-dy.byteimg.com/aweme/100x100/1b5ee000499a92bef0cda.jpeg",
authorNameFormatStr:"我们的太空",
likeCount:"2.5w",
commonCount:"5695",
shareCount:"3.8w",
musicImgUrl:"https://p9-dy.byteimg.com/aweme/100x100/1b5ee000499a92bef0cda.jpeg",
videoTitle:" #中国女兵 单兵换轮胎不服来PK!(徐博文 刘庭 李林洋 井子豪)",
marqueeText:"我们的太空@我们的太空创作的原声我们的太空@我们的太空创作的原声",
previewImg :'http://p1-dy.byteimg.com/large/tos-cn-p-0015/6e1d2c25e11a4a4ab284a87b1b987805_1573293070.jpeg?from=2563711402_large',//视频缩略图,仅支持http格式
}
]}
,function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
在现有的视频列表数据的末尾加上一个或多个数据,之前的视频列表数据仍然存在。调用该方法时若用户正在播放视频,当前视频不会受影响,即插件不会刷新当前视频重新播放。
addVideoDatas({params},callback(ret))
videos:
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "播放器未打开或不可见", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.addVideoDatas({
videos:[
{
vid : new Date().getTime()+0,
videoUrl : 'http://vfx.mtime.cn/Video/2019/03/19/mp4/190319222227698228.mp4',
authorHeadUrl:"https://p9-dy.byteimg.com/aweme/100x100/2e46d0005c1b371587ddf.jpeg",
authorNameFormatStr:"紧急救援",
likeCount:"2.5w",
commonCount:"5695",
shareCount:"3.8w",
musicImgUrl:"https://p9-dy.byteimg.com/aweme/100x100/2e46d0005c1b371587ddf.jpeg",
videoTitle:"王牌特勤队员 @高谦 和好兄弟 #赵呈 与其他救捞人直面重大灾难的挑战,一同执行惊险的海上救援任务!",
marqueeText:"紧急救援创作的原声 紧急救援创作的原声 紧急救援创作的原声",
previewImg :'https://wx4.sinaimg.cn/large/006sxID6gy1ghqg77pz3vj30rs0fmtag.jpg',//视频缩略图,仅支持http格式
},
{
vid : new Date().getTime()+1,
videoUrl : 'http://vfx.mtime.cn/Video/2019/03/18/mp4/190318214226685784.mp4',
authorHeadUrl:"https://p9-dy.byteimg.com/aweme/100x100/26e2d0003213607ba87f0.jpeg",
authorNameFormatStr:"扫毒2",
likeCount:"2.5w",
commonCount:"5695",
shareCount:"3.8w",
musicImgUrl:"https://p9-dy.byteimg.com/aweme/100x100/26e2d0003213607ba87f0.jpeg",
videoTitle:"慈善家兼金融巨子余顺天与香港最大毒贩地藏之间由“禁毒”引发的一场天地对决!",
marqueeText:"@扫毒2创作的原声 扫毒2创作的原声 扫毒2创作的原声",
},
]}
,function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
根据索引(index)删除一个视频。若删除的是当前用户正在播放的视频,则插件自动切换到下一个视频,若删除的不是当前用户正在播放的视频,则当前视频不会受影响,即插件不会刷新当前视频重新播放。
delVideoByIndex({params},callback(ret))
index:
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "最后一个视频不能删除", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.delVideoByIndex({
index:-1//-1代表删除当前页,其他index从0开始,注意index的范围。当前页的index可通过addEventListener中触发的onPageSelected事件获取,
}
,function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
设置当前页的点赞数量。
setLikeCount({params},callback(ret))
likeCountStr:
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "播放器未打开或不可见", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.setLikeCount({
likeCountStr:"1.5w"
}
,function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
设置当前页的评论数量。
setCommonCount({params},callback(ret))
commonCountStr:
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "播放器未打开或不可见", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.setCommonCount({
commonCountStr:"1.5w"
}
,function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
设置当前页的分享数量。
setShareCount({params},callback(ret))
shareCountStr:
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "播放器未打开或不可见", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.setShareCount({
shareCountStr:"1.5w"
}
,function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
播放已暂停的视频。
play(callback(ret))
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "播放器未打开或不可见", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.play(function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
暂停已播放的视频。
pause(callback(ret))
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "播放器未打开或不可见", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.pause(function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
从头开始播放视频。注意该方法对直播流无效。
replay(callback(ret))
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "播放器未打开或不可见", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.replay(function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
获取当前视频的总时长(指时间长度),调用该方法需要有网络。注意该方法对直播流无效。
getDuration(callback(ret))
ret:
{
"status": 1, //0或1,1成功,0失败。
"duration":7000,//视频总时长,单位为毫秒
"error": "获取视频时长失败", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.getDuration(function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
获取当前页视频的宽高,调用该方法需要有网络。
getVideoSize(callback(ret))
ret:
{
"status": 1, //0或1,1成功,0失败。
"width":720,//视频宽度,单位px
"height":1080,//视频高度,单位px
"error": "获取视频宽高失败", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.getVideoSize(function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
播放视频的指定位置。视频必须处于播放状态下,调用该方法才有效。注意该方法对直播流无效。
seekTo({params},callback(ret))
position:
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "播放器不处于播放状态", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.seekTo({
position:2000//从2秒的位置开始播放
},function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
获取当前正在播放的视频的播放位置。视频必须处于播放状态下,调用该方法才有效。
getCurrentPosition(callback(ret))
ret:
{
"status": 1, //0或1,1成功,0失败。
"currentPosition":1050,//视频正在播放的时间位置,单位为毫秒
"error": "播放器不处于播放状态", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.getCurrentPosition(function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
获取播放器当前的播放状态。
getCurrentPlayState(callback(ret))
ret:
{
"status": 1, //0或1,1成功,0失败。
"playState":3,//数值型,取值范围为-1到8,3和4较常用
-1:播放错误
0:闲置状态
1:正在准备状态
2:已经准备好状态
3:正在播放
4:暂停状态
5:播放完毕状态
6:正在缓冲
7:缓冲完毕
8:开始播放中止
"error": "播放器未打开或不可见", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.getCurrentPlayState(function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
获取视频总数量及单个视频数据。
getVideoCountsAndDataByIndex({params},callback(ret))
index:
ret:
{
"status": 1, //0或1,1成功,0失败。
"totalCounts":10,//总视频数量
"videoData":{...},//index指定的视频数据,默认为当前页的视频数据
"error": "获取失败", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.getVideoCountsAndDataByIndex({
index:0
},function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
设置播放器的音量。
setVolume({params},callback(ret))
volume:
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "播放器未打开或不可见", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.setVolume({
volume:0.0//设置静音
},function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
截取当前播放器的截图。视频需播放过才能截图,截图格式为jpg。
doScreenShot(callback(ret))
ret:
{
"status": 1, //0或1,1成功,0失败。
"screenShotPath":"fs://screenShot/2020_08_13_15_00_30.jpg"//截图保存的路径,为fs://格式
"error": "该视频未播放过", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.doScreenShot(function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
清除播放器所有视频、图片的缓存,若播放器永久不使用了可清除缓存,建议不清理,开发者可根据实际情况调用该方法。
clearCache(callback(ret))
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.clearCache(function(ret, err){
alert( JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
播放下一个视频。 ####一个视频播放完毕自动播放下一个视频的方法: 将每个视频的isLooping参数(详见openPlayer方法中的videos参数说明)设置为false,这时候在openPlayer的回调中当每个视频播放一次完毕时就会收到"event"为"onCompletion"的事件,当接收到"onCompletion"事件时就调用playNext方法即可,见示例代码。
playNext(callback(ret))
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.openPlayer(params,function(ret, err){
if(ret.event== "onCompletion"){//一个视频播放完毕,接收到"onCompletion"事件
douYinPlayer.playNext(function(ret, err){//自动播放下一个视频
console.log(JSON.stringify(ret)+"");
});
}
});
Android系统
可提供的1.0.1及更高版本
播放上一个视频。
将每个视频的isLooping参数(详见openPlayer方法中的videos参数说明)设置为false,这时候在openPlayer的回调中当每个视频播放一次完毕时就会收到"event"为"onCompletion"的事件,当接收到"onCompletion"事件时就调用playPrevious方法即可,见示例代码。
playPrevious(callback(ret))
ret:
{
"status": 1, //0或1,1成功,0失败。
"error": "", //错误信息,status为0时有该字段
}
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.openPlayer(params,function(ret, err){
if(ret.event== "onCompletion"){//一个视频播放完毕,接收到"onCompletion"事件
douYinPlayer.playPrevious(function(ret, err){//自动播放上一个视频
console.log(JSON.stringify(ret)+"");
});
}
});
Android系统
可提供的1.0.1及更高版本