# video

Video模块管理多媒体视频相关能力，可用创建视频播放控件，直播推流控件等。

## 方法：

- createVideoPlayer: 创建VideoPlayer对象
- createLivePusher: 创建LivePusher对象
- getVideoPlayerById: 查找已经创建的VideoPlayer对象
- getLivePusherById: 查找已经创建的LivePusher对象

## 对象：

- VideoPlayer: 视频播放控件对象
- VideoPlayerStyles: 视频播放控件参数
- VideoPlayerEvents: 视频播放控件事件类型
- LivePusher: 直播推流控件对象
- LivePusherStyles: 直播推流控件配置选项
- LivePusherEvents: 直播推流控件事件类型

## 回调方法：

- VideoPlayerEventCallback: 视频播放控件事件监听回调函数
- LivePusherEventCallback: 视频播放控件事件监听回调函数

## 权限：

5+功能模块（permissions）

    {
    // ...
    "permissions":{
    	// ...
    	"VideoPlayer": {
    		"description": "视频播放"
    	},
    	"LivePusher": {
    		"description": "直播推流"
    	}
    }
    }

# VideoPlayer

视频播放控件对象

    interface plus.video.VideoPlayer {
    	// Methods
    	function void addEventListener(event, listener, capture);
    	function void setStyles(styles);
    	function void play();
    	function void pause();
    	function void seek(position);
    	function void requestFullScreen();
    	function void exitFullScreen();
    	function void stop();
    	function void hide();
    	function void show();
    	function void close();
    	function void sendDanmu(danmu);
    	function void playbackRate(rate);
    }

## 说明：

VideoPlayer对象表示视频播放控件对象，在窗口中播放视频，可支持本地视频(mp4/flv)，网络视频地址（mp4/flv/m3u8）及流媒体（rtmp/hls/rtsp）。 编码格式： Android平台：h264、mpeg4、flv、hevc、vp6f、vp8/9 iOS平台：h264、mpeg4、flv、hevc、vp6f

## 构造：

- VideoPlayer.constructor(id, styles): 创建VideoPlayer对象

## 方法：

- addEventListener: 监听视频播放控件事件
- setStyles: 设置视频播放控件参数
- setOptions: 设置视频播放控件参数（将废弃，使用setStyles）
- play: 播放视频
- pause: 暂停视频
- seek: 跳转到指定位置
- requestFullScreen: 切换到全屏
- exitFullScreen: 退出全屏
- stop: 停止播放视频
- hide: 隐藏视频播放控件
- show: 显示视频播放控件
- close: 关闭视频播放控件
- sendDanmu: 发送弹幕
- playbackRate: 设置倍速播放

# VideoPlayerStyles

视频播放控件参数

## 属性：

- src: (String 类型 )视频资源地址

  支持本地地址，也支持网络地址及直播流（RTMP）。

- initial-time: (Number 类型 )视频初始播放位置

  单位为秒（s）。 注意：仅在视频开始播放前设置有效。

- duration: (Number 类型 )视频长度

  单位为秒（s）。 注意：仅在视频开始播放前设置有效。

- controls: (Boolean 类型 )是否显示默认播放控件

  默认值为true。 包括播放/暂停按钮、播放进度、时间等。

- danmu-list: (Array(JSON) 类型 )弹幕列表

  弹幕JSON对象包括属性：text（String类型，弹幕文本类容），color（String类型，弹幕颜色，格式为#RRGGBB），time（Number类型，弹幕出现的时间，单位为秒）。

- danmu-btn: (Boolean 类型 )是否显示弹幕按钮

  默认值为false。 注意：仅在控件构造时设置有效，不能动态更新。

- enable-danmu: (Boolean 类型 )是否展示弹幕

  默认值为false。 注意：仅在控件构造时设置有效，不能动态更新。

- autoplay: (Boolean 类型 )是否自动播放

  默认值为false。

- loop: (Boolean 类型 )是否循环播放

  默认值为false。

- muted: (Boolean 类型 )是否静音播放

  默认值为false。

- direction: (Number 类型 )设置全屏时视频的方向

  不指定则根据宽高比自动判断。 有效值为： 0（正常竖向）, 90（屏幕逆时针90度）, -90（屏幕顺时针90度）。 默认值为-90。

- show-progress: (Boolean 类型 )是否显示播放进度

  默认值为true。

- show-fullscreen-btn: (Boolean 类型 )是否显示全屏按钮

  默认值为true。

- show-play-btn: (Boolean 类型 )是否显示视频底部控制栏的播放按钮

  默认值为true。

- show-center-play-btn: (Boolean 类型 )是否显示视频中间的播放按钮

  默认值为true。

- enable-progress-gesture: (Boolean 类型 )是否开启控制进度的手势

  默认值为true。

- objectFit: (String 类型 )当视频大小与 video 容器大小不一致时，视频的表现形式

  有效值为：contain（包含），fill（填充），cover（覆盖）。 默认值为contain。 仅Android平台支持。

- poster: (String 类型 )视频封面的图片网络资源地址

  如果 controls 属性值为 false 则设置 poster 无效。

- top: (String 类型 )VideoPlayer控件左上角的垂直偏移量

  可取值： 像素值，如"100px"； 百分比，如"10%"，相对于父Webview窗口的高度； 自动计算，如"auto",根据height值自动计算，相对于父Webview窗口垂直居中。

- left: (String 类型 )VideoPlayer控件左上角的水平偏移量

  可取值： 像素值，如"100px"； 百分比，如"10%"，相对于父Webview窗口的宽度； 自动计算，如"auto"，根据width值自动计算，相对于父Webview窗口水平居中。 默认值为"0px"。

- width: (String 类型 )VideoPlayer控件的宽度

  可取值： 像素值，如"100px"； 百分比，如"10%"，相对于父Webview窗口的宽度。 默认值为"100%"。

- height: (String 类型 )VideoPlayer控件的高度

  可取值： 像素值，如"100px"； 百分比，如"10%"，相对于父Webview窗口的高度。 默认值为"100%"。

- position: (String 类型 )VideoPlayer控件在Webview窗口的布局模式

  可取值： "static" - 静态布局模式，如果页面存在滚动条则随窗口内容滚动； "absolute" - 绝对布局模式，如果页面存在滚动条不随窗口内容滚动； 默认值为"static"。

# VideoPlayerEvents

视频播放控件事件类型

## 常量：

- "play": (String 类型 )视频播放事件

  当视频开始/继续播放时触发。 无事件回调函数参数。

- "pause": (String 类型 )视频暂停事件

  当视频暂停播放时触发。 无事件回调函数参数。

- "ended": (String 类型 )视频结束事件

  当视频播放到末尾时触发。 无事件回调函数参数。

- "timeupdate": (String 类型 )视频播放进度更新事件

  当视频播放进度变化时触发，触发频率250ms一次。 事件回调函数参数event.detail = {currentTime:"Number类型，当前播放时间（单位为秒）",duration:"Number类型，视频总长度（单位为秒）"}。

- "fullscreenchange": (String 类型 )视频播放全屏播放状态变化事件

  当视频播放进入或退出全屏时触发。 事件回调函数参数event.detail = {fullScreen:"Boolean类型，当前状态是否为全屏", direction:"String类型，vertical或horizontal"}。

- "waiting": (String 类型 )视频缓冲事件

  当视频播放出现缓冲时触发。 无事件回调函数参数。

- "error": (String 类型 )视频错误事件

  当视频播放出错时触发。 无事件回调函数参数。

# LivePusher

直播推流控件对象

    interface plus.video.LivePusher {
    	// Methods
    	function void addEventListener(event, listener, capture);
    	function void setStyles(styles);
    	function void preview();
    	function void start();
    	function void stop(options);
    	function void pause();
    	function void resume();
    	function void switchCamera();
    	function void snapshot();
    	function void close();
    }

## 说明：

LivePusher对象表示直播推流控件对象，在窗口中显示捕获视频，实时推送到流媒体（RTMP）服务器。

## 构造：

- LivePusher.constructor(id, options): 创建LivePusher对象

## 方法：

- addEventListener: 监听直播推流控件事件
- setStyles: 设置直播推流控件参数
- setOptions: 设置直播推流控件参数（将废弃，使用setStyles）
- preview: 预览摄像头采集数据
- start: 开始推流
- stop: 停止推流
- pause: 暂停推流
- resume: 恢复推流
- switchCamera: 切换前后摄像头
- snapshot: 快照
- close: 关闭直播推流控件

# LivePusherStyles

直播推流控件配置选项

## 属性：

- url: (String 类型 )推流地址

  支持RTMP协议。

- mode: (String 类型 )推流视频模式

  可取值：SD（标清）, HD（高清）, FHD（超清）。

- muted: (Boolean 类型 )是否静音

  默认值为false。

- enable-camera: (Boolean 类型 )开启摄像头

  默认值为true。

- auto-focus: (Boolean 类型 )自动聚集

  默认值为true。

- beauty: (Number 类型 )是否美颜

  可取值0、1，其中0表示不使用美颜，1表示不使用美颜。 默认值为0(不使用美颜)。

- whiteness: (Number 类型 )是否美白

  可取值0、1、2、3、4、5，其中0表示不使用美白，其余值分别表示美白的程度，值越大美白程度越大。 默认值为0（不使用美白）。

- aspect: (String 类型 )宽高比

  可取值：3:4, 9:16。

- min-bitrate: (Number 类型 )最小码率

  默认值为200。

- max-bitrate: (Number 类型 )最大码率

  默认值为1000。

- top: (String 类型 )LivePusher控件左上角的垂直偏移量

  可取值： 像素值，如"100px"； 百分比，如"10%"，相对于父Webview窗口的高度； 自动计算，如"auto",根据height值自动计算，相对于父Webview窗口垂直居中。

- left: (String 类型 )LivePusher控件左上角的水平偏移量

  可取值： 像素值，如"100px"； 百分比，如"10%"，相对于父Webview窗口的宽度； 自动计算，如"auto"，根据width值自动计算，相对于父Webview窗口水平居中。 默认值为"0px"。

- width: (String 类型 )LivePusher控件的宽度

  可取值： 像素值，如"100px"； 百分比，如"10%"，相对于父Webview窗口的宽度。 默认值为"100%"。

- height: (String 类型 )LivePusher控件的高度

  可取值： 像素值，如"100px"； 百分比，如"10%"，相对于父Webview窗口的高度。 默认值为"100%"。

- position: (String 类型 )LivePusher控件在Webview窗口的布局模式

  可取值： "static" - 静态布局模式，如果页面存在滚动条则随窗口内容滚动； "absolute" - 绝对布局模式，如果页面存在滚动条不随窗口内容滚动； 默认值为"static"。

# LivePusherEvents

直播推流控件事件类型

## 常量：

- "statechange": (String 类型 )状态变化事件

  当推流连接服务器状态变化时触发。 事件回调函数参数event={type:"事件类型，此时为statechange",target:"触发此事件的直播推流控件对象",detail:{code:"状态码，参考后面状态码说明",message:"描述信息"}}。 其中code状态码： 1001 - 已经连接推流服务器； 1002 - 已经与服务器握手完毕,开始推流； 1003 - 打开摄像头成功； 1004 - 录屏启动成功； 1005 - 推流动态调整分辨率； 1006 - 推流动态调整码率； 1007 - 首帧画面采集完成； 1008 - 编码器启动； -1301 - 打开摄像头失败； -1302 - 打开麦克风失败； -1303 - 视频编码失败； -1304 - 音频编码失败； -1305 - 不支持的视频分辨率； -1306 - 不支持的音频采样率； -1307 - 网络断连，且经多次重连抢救无效，更多重试请自行重启推流； -1308 - 开始录屏失败，可能是被用户拒绝； -1309 - 录屏失败，不支持的Android系统版本，需要5.0以上的系统； -1310 - 录屏被其他应用打断了； -1311 - Android Mic打开成功，但是录不到音频数据； -1312 - 录屏动态切横竖屏失败； 1101 - 网络状况不佳：上行带宽太小，上传数据受阻； 1102 - 网络断连, 已启动自动重连； 1103 - 硬编码启动失败,采用软编码； 1104 - 视频编码失败； 1105 - 新美颜软编码启动失败，采用老的软编码； 1106 - 新美颜软编码启动失败，采用老的软编码； 3001 - RTMP -DNS解析失败； 3002 - RTMP服务器连接失败； 3003 - RTMP服务器握手失败； 3004 - RTMP服务器主动断开，请检查推流地址的合法性或防盗链有效期； 3005 - RTMP 读/写失败。

- "netstatus": (String 类型 )网络状态通知事件

  当推流的网络状态发生变化时触发。 事件回调函数参数event={type:"事件类型，此时为netstatus",target:"触发此事件的直播推流控件对象",detail:{videoBitrate:"视频码率",audioBitrate:"音频码率",videoFPS:"视频帧率",netSpeed:"推流网速",videoWidth:"视频宽度",videoHeight:"视频高度"}}。

- "error": (String 类型 )渲染错误事件

  当推流发生错误是触发。 事件回调函数参数event={type:"事件类型，此时为error",target:"触发此事件的直播推流控件对象",detail:{code:"错误编码，参考后面错误码说明",message:"描述信息"}}。 其中code错误码： 1001 - 用户禁止使用摄像头； 1002 - 用户禁止使用录音。

# VideoPlayerEventCallback

视频播放控件事件监听回调函数

    void onEvent(event) {
    	// Authenticate success code.
    }

## 参数：

- event: ( JSON ) 可选 事件触发时返回的参数
  不同事件返回的参数不一样，详情参考VideoPlayerEvents事件说明。

## 返回值：

void : 无

# LivePusherEventCallback

视频播放控件事件监听回调函数

    void onEvent(event) {
    	// event code.
    }

## 参数：

- event: ( JSON ) 可选 事件触发时返回的参数
  不同事件返回的参数不一样，详情参考LivePusherEvents事件说明。

## 返回值：

void : 无