douYinPlayer

来自于:开发者

概述

本模块通过原生代码实现了抖音上下滑动播放视频的功能,无论是界面还是用户操作产生的动画都和抖音一样,开发者只要几行代码就可以轻松实现抖音的界面和功能,方便快捷。内核采用现今最流行的IJKPlayer播放器实现,该播放器快速高效,在播放视频和直播方面具有很好的表现。界面上,用户可以无限循环上下滑动,同时本模块也开放了对各个功能区域的可见性控制,比如关注、点赞、分享、评论、音乐动画、跑马灯文字等等功能区域,开发者都可以通过参数控制这些区域的可见性,实现纯视频模式和视频+功能区域之间的切换,目前模块只支持Android平台,后续会上线IOS平台。本模块中约定,参数中返回的status值为0或1,1代表成功,0代表失败。

模块特点:

① 高仿抖音主视频播放界面;

② 向上或向下滑动无限循环轮播视频;

③ 可单独设置评论数量、点赞数量、分享数量;

④ 可设置各个功能区域是否可见;

⑤ 开发者可在模块上层增加一层透明的frame或window,用于自定义界面,响应用户的交互请求;

视频、图片优化说明:

开发中大部分情况下我们需要缓存视频、图片,本模块实现了视频加载缓存和图片三级缓存。用户打开视频后,上下两个视频就已经加载好了,此时用户向上或者向下滑动后视频就立即可以播放,减少了用户等待的时间,大大增加了用户体验。加载网络图片后,模块会把图片缓存到内存,同时把图片缓存文件存到手机自带的sd卡。 再次加载图片时模块会先从内存找,如果找到则马上显示在界面上,如果内存没有则从sd卡查找图片缓存文件加载显示,再没有才从网络加载显示,三级缓存大大节省了用户的手机流量,相对js代码更具高效性,切换更加流畅,大大降低了app内存占用率。

示例图片:


图1:为了方便文档说明,本文规定了以下区域:

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

图3:纯视频模式(无图1所示的区域),visibility全部设置成false即可:

图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 
    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:默认播放方式;1:  16:9的方式播放视频;2:  4:3的方式播放视频;3:填充播放器;4:视频原始宽高播放视频;5:居中裁剪的方式播放视频(有点像imageScaleType的1值)
}, 
...

placeHolderImg:

  • 类型:字符串
  • 描述:(可选项)右下角音乐动画的背景图片,仅支持widget格式,默认为模块的背景图。音乐动画区域的圆形由两个圆形图片组成,placeHolderImg为底层大的圆形图,musicImgUrl(见videos参数说明)为上层小圆形图。

videoBgImg:

  • 类型:字符串
  • 描述:(可选项)视频播放时的背景图片,仅支持widget://和fs://格式。


注意:previewImg、placeHolderColor、placeHolderImg都是视频播放前起作用,而videoBgImg是视频播放时起作用。

musicBgImg:

  • 类型:字符串
  • 描述:(可选项)右下角音乐动画的背景图片,仅支持widget格式,默认为模块的背景图。音乐动画区域的圆形由两个圆形图片组成,placeHolderImg为底层大的圆形图,musicImgUrl(见videos参数说明)为上层小圆形图。

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,//单击视频是否出现暂停/播放按钮
}

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,//单击视频是否出现暂停/播放按钮
                    },
*/                    
                    },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)+"" });
                    });
                });

可用性

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时,视频播放完毕不会返回该事件
                "onBufferingStart",//视频开始缓冲事件
                "onBufferingEnd",//视频缓冲完毕事件
                "onPrepared",//视频准备完毕事件,此时视频可以马上播放
                "onLongPress",//视频长按事件
                "onDoubleTap",//视频双击事件
                "onSingleTapConfirmed",//视频单击事件
                "onMoveLeft",//左滑事件
                "onMoveRight",//右滑事件
                "onHeadClick",//头像点击事件
                "onFollowBtnClick",//关注按钮点击事件
                "onLikeBtnClick",//点赞按钮点击事件
                "onCommonBtnClick",//评论按钮点击事件
                "onShareBtnClick",//分享按钮点击事件
                "onMusicBtnClick",//音乐动画区域点击事件
                "onAuthorNameClick",//作者名字区域点击事件
                "onVideoTitleClick",//视频标题区域点击事件
                "onMarqueeTextClick",//跑马灯文字区域点击事件
                "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及更高版本