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.yonyou.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:以不按图片原比例伸缩为代价,强制让图片充满整个播放器区域,图片会变形。
    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:

  • 类型:字符串
  • 描述:(可选项)右下角音乐动画的背景图片,仅支持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及更高版本

是否仍需要帮助? 请保持联络!
最后更新于 2024/04/24