douYinPlayer
来自于:开发者
playNext playPrevious
概述
本模块通过原生代码实现了抖音上下滑动播放视频的功能,无论是界面还是用户操作产生的动画都和抖音一样,开发者只要几行代码就可以轻松实现抖音的界面和功能,方便快捷。内核采用现今最流行的IJKPlayer播放器实现,该播放器快速高效,在播放视频和直播方面具有很好的表现。界面上,用户可以无限循环上下滑动,同时本模块也开放了对各个功能区域的可见性控制,比如关注、点赞、分享、评论、音乐动画、跑马灯文字等等功能区域,开发者都可以通过参数控制这些区域的可见性,实现纯视频模式和视频+功能区域之间的切换,目前模块只支持Android平台,后续会上线IOS平台。本模块中约定,参数中返回的status值为0或1,1代表成功,0代表失败。
模块特点:
① 高仿抖音主视频播放界面;
② 向上或向下滑动无限循环轮播视频;
③ 可单独设置评论数量、点赞数量、分享数量;
④ 可设置各个功能区域是否可见;
⑤ 开发者可在模块上层增加一层透明的frame或window,用于自定义界面,响应用户的交互请求;
视频、图片优化说明:
开发中大部分情况下我们需要缓存视频、图片,本模块实现了视频加载缓存和图片三级缓存。用户打开视频后,上下两个视频就已经加载好了,此时用户向上或者向下滑动后视频就立即可以播放,减少了用户等待的时间,大大增加了用户体验。加载网络图片后,模块会把图片缓存到内存,同时把图片缓存文件存到手机自带的sd卡。 再次加载图片时模块会先从内存找,如果找到则马上显示在界面上,如果内存没有则从sd卡查找图片缓存文件加载显示,再没有才从网络加载显示,三级缓存大大节省了用户的手机流量,相对js代码更具高效性,切换更加流畅,大大降低了app内存占用率。
示例图片:

图2:操作演示动画(有点掉帧,录制问题,实际效果很好):


图4:视频+功能区域模式,visibility默认全部为true:

Widget示例代码及体验apk下载地址:https://community.apicloud.com/bbs/thread-163621-1-1.html
模块接口
openPlayer
打开播放器。注意该方法为耗时方法,若视频数量较多,建议做用户等待处理,直至该方法返回。
openPlayer({params},callback(ret))
params
videos:
- 类型:JSON数组
- 描述:(必填项)要显示的视频数据,视频数量应大于等于1。
- 内部字段:
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:以不按图片原比例伸缩为代价,强制让图片充满整个播放器区域,图片会变形。
},
...
placeHolderImg:
- 类型:字符串
- 描述:(可选项)右下角音乐动画的背景图片,仅支持widget格式,默认为模块的背景图。音乐动画区域的圆形由两个圆形图片组成,placeHolderImg为底层大的圆形图,musicImgUrl(见videos参数说明)为上层小圆形图。
videoBgImg:
- 类型:字符串
- 描述:(可选项)视频播放时的背景图片,仅支持widget://和fs://格式。
注意:previewImg、placeHolderColor、placeHolderImg都是视频播放前起作用,而videoBgImg是视频播放时起作用。
musicBgImg:
- 类型:字符串
- 描述:(可选项)右下角音乐动画的背景图片,仅支持widget格式,默认为模块的背景图。音乐动画区域的圆形由两个圆形图片组成,placeHolderImg为底层大的圆形图,musicImgUrl(见videos参数说明)为上层小圆形图。
backBtnImg:
- 类型:字符串
- 描述:(可选项)返回按钮图片,仅支持widget格式,默认为模块的分享按钮图片,如示例图片所示。
shareBtnImg:
- 类型:字符串
- 描述:(可选项)分享按钮图片,仅支持widget格式,默认为模块的分享按钮图片,如示例图片所示。
commonBtnImg:
- 类型:字符串
- 描述:(可选项)评论按钮图片,仅支持widget格式,默认为模块的评论按钮图片,如示例图片所示。
startPlayIndex:
- 类型:数值型
- 描述:(可选项)默认打开第几个视频,默认0。
fixedOn:
- 类型:字符串
- 描述:必填项,要将该模块添加到哪个frame显示,一般本模块需要全屏显示。若不传则模块归属于当前 Window。建议该值不要为空。
注意:frame页面要设置成不可弹动,这是为了让本模块有更好的上下滑动效果。设置frame页面不可弹动的方法:在用openFrame打开frame时将bounces参数设置成false即可。
fixed:
- 类型:布尔值
- 描述:可选项,模块是否不随所属 Window 或 Frame 滚动,默认true
注意:若设置为false,页面的滑动很可能与模块视频的上下滑动相冲突,强烈建议该项设置为true。若出现视频无法上下滑动切换,请将该值设置为true!当fixedOn为空或不传时,fixed为false时模块会添加到当前window的最底层(模块的上层是其他frame),fixed为true时模块会添加到当前window的最上层(模块的底层是其他frame)。
visibility:
- 类型:JSON对象
- 描述:(可选项)用于设置各个功能区域是否显示,默认都为true
- 内部字段:
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:
- 类型:JSON对象
- 描述:(可选项)用于设置模块显示的位置和宽高,
- 内部字段:
rect : {
x : 0,//默认0
y : 250,//默认0
//w :,//默认填充整个屏幕的宽度
h : 200//默认填充整个屏幕的高度
}
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回打开播放器的状态
- 内部字段:
{
"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及更高版本
addEventListener
设置播放器的事件监听,该方法建议在openPlayer回调成功后调用。
addEventListener(callback(ret))
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回事件名称及相应数据
- 内部字段:
{
"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参数说明。
}
注意:对于视频标题区域点击事件(即onVideoTitleClick事件),共有4个事件,分别为"Hashtag"、"Mention"、"Url"、"Phone"、"Email",在添加该区域的文字时,这些事件相应的关键字的两旁都要加上一个空格,这样模块才能识别出这些关键字,才能使用户点击这些关键字时触发这4个事件,同时满足这些事件的关键字也会高亮显示,肉眼即可看出。比如对于"Mention"事件要写成如下:" @抖音小助手 ",即“@抖音小助手”的左边和右边都要加上一个空格。
"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及更高版本
hidePlayer
隐藏播放器,播放器暂时不使用时可隐藏起来,但是如果要永久关闭播放器,要调用closePlayer方法,而不是hidePlayer方法。隐藏后正在播放的视频会暂停。
hidePlayer(callback(ret))
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否隐藏成功
- 内部字段:
{
"status": 1, //0或1,1成功,0失败。
}
示例代码
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.hidePlayer(function(ret, err){
alert( JSON.stringify(ret));
});
可用性
Android系统
可提供的1.0.0及更高版本
showPlayer
显示播放器,通过hidePlayer方法隐藏播放器后,通过showPlayer显示出来。
showPlayer(callback(ret))
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否显示成功
- 内部字段:
{
"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
关闭播放器,播放器不使用后一定要调用该方法,以免发生内存泄露。
closePlayer(callback(ret))
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回关闭是否成功
- 内部字段:
{
"status": 1, //0或1,1成功,0失败。
}
示例代码
var douYinPlayer = api.require('douYinPlayer');
douYinPlayer.closePlayer(function(ret, err){
alert( JSON.stringify(ret));
});
});
可用性
Android系统
可提供的1.0.0及更高版本
setVideoDatas
重新设置视频列表数据,调用该方法播放器不再保存之前的视频列表数据。该方法必须是调用过openPlayer方法之后才能调用。注意该方法为耗时方法,若视频数量较多,建议做用户等待处理,直至该方法返回。
setVideoDatas({params},callback(ret))
params
videos:
- 类型:JSON数组
- 描述:(必填项)要重新设置的视频数据,视频数量应大于等于1。
- 内部字段:与openPlayer中的videos参数一样,请参考openPlayer中的videos参数。
注意:setVideoDatas只有videos参数,无其他参数
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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
在现有的视频列表数据的末尾加上一个或多个数据,之前的视频列表数据仍然存在。调用该方法时若用户正在播放视频,当前视频不会受影响,即模块不会刷新当前视频重新播放。
addVideoDatas({params},callback(ret))
params
videos:
- 类型:JSON数组
- 描述:(必填项)要增加的视频数据,视频数量应大于等于1。
- 内部字段:与openPlayer中的videos参数一样,请参考openPlayer中的videos参数。
注意:addVideoDatas只有videos参数,无其他参数
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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及更高版本
delVideoByIndex
根据索引(index)删除一个视频。若删除的是当前用户正在播放的视频,则模块自动切换到下一个视频,若删除的不是当前用户正在播放的视频,则当前视频不会受影响,即模块不会刷新当前视频重新播放。
delVideoByIndex({params},callback(ret))
params
index:
- 类型:数值型
- 描述:(必填项)要删除的视频索引,index从0开始,注意index的范围。为方便开发者,模块规定:若index传-1则为删除当前页的视频。若要删除其他视频,则正常传递视频的索引即可。
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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
设置当前页的点赞数量。
setLikeCount({params},callback(ret))
params
likeCountStr:
- 类型:字符串
- 描述:(必填项)点赞数量,字符串类型,若点赞数量过大,可将数量转为字符串,如1.5W等。本参数最大字符数量为5,即本字符串不能超过5个字符。
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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
设置当前页的评论数量。
setCommonCount({params},callback(ret))
params
commonCountStr:
- 类型:字符串
- 描述:(必填项)评论数量,字符串类型,若评论数量过大,可将数量转为字符串,如1.5W等。本参数最大字符数量为5,即本字符串不能超过5个字符。
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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
设置当前页的分享数量。
setShareCount({params},callback(ret))
params
shareCountStr:
- 类型:字符串
- 描述:(必填项)分享数量,字符串类型,若分享数量过大,可将数量转为字符串,如1.5W等。本参数最大字符数量为5,即本字符串不能超过5个字符。
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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
播放已暂停的视频。
play(callback(ret))
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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
暂停已播放的视频。
pause(callback(ret))
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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
从头开始播放视频。注意该方法对直播流无效。
replay(callback(ret))
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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
获取当前视频的总时长(指时间长度),调用该方法需要有网络。注意该方法对直播流无效。
getDuration(callback(ret))
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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
获取当前页视频的宽高,调用该方法需要有网络。
getVideoSize(callback(ret))
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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
播放视频的指定位置。视频必须处于播放状态下,调用该方法才有效。注意该方法对直播流无效。
seekTo({params},callback(ret))
params
position:
- 类型:数值型
- 描述:(必填项)播放的位置,指的是时间位置,单位为毫秒。该值需大于0且小于视频总时长。
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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
获取当前正在播放的视频的播放位置。视频必须处于播放状态下,调用该方法才有效。
getCurrentPosition(callback(ret))
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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
获取播放器当前的播放状态。
getCurrentPlayState(callback(ret))
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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
获取视频总数量及单个视频数据。
getVideoCountsAndDataByIndex({params},callback(ret))
params
index:
- 类型:数值型
- 描述:(可选项)需要获取单个视频数据的视频索引,index可不传,若不传默认返回当前页视频的数据,若传index需大于等于0且小于视频列表总数量。
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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
设置播放器的音量。
setVolume({params},callback(ret))
params
volume:
- 类型:浮点型
- 描述:(必填项)音量大小,取值范围0.0至1.0, 0.0为静音。
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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及更高版本
doScreenShot
截取当前播放器的截图。视频需播放过才能截图,截图格式为jpg。
doScreenShot(callback(ret))
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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
清除播放器所有视频、图片的缓存,若播放器永久不使用了可清除缓存,建议不清理,开发者可根据实际情况调用该方法。
clearCache(callback(ret))
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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及更高版本
playNext
播放下一个视频。
一个视频播放完毕自动播放下一个视频的方法:
将每个视频的isLooping参数(详见openPlayer方法中的videos参数说明)设置为false,这时候在openPlayer的回调中当每个视频播放一次完毕时就会收到"event"为"onCompletion"的事件,当接收到"onCompletion"事件时就调用playNext方法即可,见示例代码。
playNext(callback(ret))
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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及更高版本
playPrevious
播放上一个视频。
一个视频播放完毕自动播放上一个视频的方法:
将每个视频的isLooping参数(详见openPlayer方法中的videos参数说明)设置为false,这时候在openPlayer的回调中当每个视频播放一次完毕时就会收到"event"为"onCompletion"的事件,当接收到"onCompletion"事件时就调用playPrevious方法即可,见示例代码。
playPrevious(callback(ret))
callback(ret)
ret:
- 类型:JSON对象
- 描述:返回是否成功
- 内部字段:
{
"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及更高版本