为帮助用户更好更快的使用插件,论坛维护了一个示例,示例中包含示例代码、知识点讲解、注意事项等,供您参考。
videoRecorder 插件封装了原生录像机的相关功能,通过本插件的 open 接口可打开摄像头的 frame ,可通过相应参数配置其位置、大小、视频质量、保存路径等信息。开发者可通过 open 一个自定义界面的 frame 覆盖在本插件上来自定义录像界面。
插件功能概览:
0,自定义录像界面
1,开始录像
2,停止录像
3,设置、获取焦距
4,设置、获取闪光灯
5,设置、获取前置后置摄像头转换
6,重新设置镜头聚焦区
7,将录制的视频保存在指定位置
插件示意截图:
打开录像机
open({params}, callback(ret))
rect:
{
x: 0, //(可选项)数字类型;插件左上角的 x 坐标(相对于所属的 Window 或 Frame);默认值:0
y: 0, //(可选项)数字类型;插件左上角的 y 坐标(相对于所属的 Window 或 Frame);默认值:0
w: 80, //(可选项)数字类型;插件的宽度;若传'auto',页面从x位置开始自动充满所属的 Window 或 Frame 的宽度;默认:'auto'(Android平台下h要大于等于w,否则预览会拉伸)
h: 50 //(可选项)数字类型;插件的高度;若传'auto',页面从y位置开始自动充满所属的 Window 或 Frame 的高度;默认:'auto'(Android平台下h要大于等于w,否则预览会拉伸)
}
size:
{
w: 320, //(可选项)数字类型;宽度;默认:rect中的w
h: 480 //(可选项)数字类型;高度;默认:rect中的h
}
fps:
quality:
orientation:
saveToAlbum:
save:
{
path: '', //(可选项)字符串类型;录制的视频保存的文件夹(文件若不存在则插件自动创建)路径,仅支持 fs:// 协议,若不传则保存在临时文件夹(插件会自动删除该文件)下
name: '', //(可选项)字符串类型;录制的视频文件名,不需指定后缀名(插件自动添加),若不传则使用插件默认名:videoRecorder;若该目录下已存在同名文件则覆盖
composeName: '', //(可选项)字符串类型;compose接口合成背景音乐的视频文件名,不需指定后缀名(插件自动添加),若不传则使用插件默认名:videoRecorderCompose;若该目录下已存在同名文件则覆盖
type: '' //(可选项)字符串类型;保存视频的格式,取值范围如下:
//iOS 平台支持的类型
//quickTime:后缀名为mov格式的视频文件
//mpeg4(默认值):后缀名为mp4格式的视频文件
//appleM4V:后缀名为m4v格式的视频文件
//appleM4A:后缀名为m4a格式的视频文件
//3gpp:后缀名为3gp格式的视频文件
//3gp2:后缀名为3g2格式的视频文件
//Android 平台支持的类型
//mpeg4(默认值):后缀名为mp4格式的视频文件
//3gpp:后缀名为3gp格式的视频文件
}
camera:
fixedOn:
fixed:
ret:
{
eventType: 'show', //字符串类型;扫码事件类型
//取值范围:
//show:打开录像机并显示在屏幕上
//finished:录像结束
//fail:无访问摄像头或麦克风权限
filePath: '', //字符串类型;录像视频文件绝对路径,仅当 eventType 为 finished 时有值
albumPath: '', //字符串类型;录像视频文件在系统相册的路径,仅当 eventType 为 finished,且 saveToAlbum 为 true 时有值
duration: 1000, //数字类型;录像视频文件的时长,单位:毫秒,仅当eventType 为 finished 时有值。duration字段返回的总时长小于等于0时说明录制的视频是无效文件,前端根据自己需求进行处理。
size: 1024, //数字类型;录像视频文件的大小,单位:字节,仅当 eventType 为 finished 时有值
errMsg:" //错误信息提示。仅当 eventType 为 fail 时有值。
thumbnailPath:'' //字符串类型;录制完成视频的缩略图路径
}
var videoRecorder = api.require('videoRecorder');
videoRecorder.open({
rect: {
x: 0,
y: 0,
w: api.frameWidth,
h: api.frameWidth - 20
},
quality: "medium",
saveToAlbum: false,
save: {
path: 'fs://videoRecorder',
name: 'firstVideo'
},
fixedOn: api.frameName,
fixed: false
}, function(ret) {
if (ret) {
api.alert({msg: JSON.stringify(ret)});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置摄像头方向,请在调用 start 接口之前调用
注意:
视频录制过程中涉及到两个方向: 1,录制的视频的方向; 2,open打开的视频预览区域的方向;其中1(录制的视频的方向)一般设置成当前设备的方向,开始录制(start)后便不能再改变。2(open打开的视频预览区域的方向)必须跟当前window方向(通过api.setScreenOrientation设置的方向)一致。
setOrientation({params}, callback(ret))
target:
orientation:
var videoRecorder = api.require('videoRecorder');
videoRecorder.setOrientation({
orientation: 'right'
target:''
});
iOS系统,Android系统
可提供的1.0.5及更高版本
开始录像
start({params})
timer:
save:
{
path: '', //(可选项)字符串类型;录制的视频保存的文件夹(文件若不存在则插件自动创建)路径,仅支持 fs:// 协议,若不传则保存在临时文件夹(插件会自动删除该文件)下
name: '', //(可选项)字符串类型;录制的视频文件名,不需指定后缀名(插件自动添加),若不传则使用插件默认名:videoRecorder;若该目录下已存在同名文件则覆盖
type: '' //(可选项)字符串类型;保存视频的格式,取值范围如下:
//iOS 平台支持的类型
//quickTime:后缀名为mov格式的视频文件
//mpeg4(默认值):后缀名为mp4格式的视频文件
//appleM4V:后缀名为m4v格式的视频文件
//appleM4A:后缀名为m4a格式的视频文件
//3gpp:后缀名为3gp格式的视频文件
//3gp2:后缀名为3g2格式的视频文件
//Android 平台支持的类型
//mpeg4(默认值):后缀名为mp4格式的视频文件
//3gpp:后缀名为3gp格式的视频文件
}
audioUrl:
isMute:
var videoRecorder = api.require('videoRecorder');
videoRecorder.start({
timer: 10
});
iOS系统,Android系统
可提供的1.0.0及更高版本
停止录像
stop({params})
var videoRecorder = api.require('videoRecorder');
videoRecorder.stop();
iOS系统,Android系统
可提供的1.0.0及更高版本
关闭录像机
close()
var videoRecorder = api.require('videoRecorder');
videoRecorder.close();
iOS系统,Android系统
可提供的1.0.0及更高版本
显示已隐藏的录像机
show()
var videoRecorder = api.require('videoRecorder');
videoRecorder.show();
iOS系统,Android系统
可提供的1.0.0及更高版本
隐藏录像机,并没有从内存里清除
hide()
var videoRecorder = api.require('videoRecorder');
videoRecorder.hide();
iOS系统,Android系统
可提供的1.0.0及更高版本
重设拍摄区域的大小和位置
setRect({params})
rect:
{
x: 0, //(可选项)数字类型;插件左上角的 x 坐标(相对于所属的 Window 或 Frame);默认值:原值
y: 0, //(可选项)数字类型;插件左上角的 y 坐标(相对于所属的 Window 或 Frame);默认值:原值
w: 80, //(可选项)数字类型;插件的宽度;默认:原值
h: 50 //(可选项)数字类型;插件的高度;默认:原值
}
var videoRecorder = api.require('videoRecorder');
videoRecorder.setRect({
rect: {
x: 10,
y: 64,
w: 300,
h: 300
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
获取录像机当前缩放数值
getZoom(callback(ret))
ret:
{
status: true, //布尔型;是否获取成功
zoom: //数字类型;当前录像机的焦距
}
var videoRecorder = api.require('videoRecorder');
videoRecorder.getZoom(function(ret) {
if (ret.status) {
api.alert({msg: JSON.stringify(ret)});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置视图大小,若为 2 则表示远视图被放大一倍
setZoom({params})
zoom:
var videoRecorder = api.require('videoRecorder');
videoRecorder.setZoom({
zoom: 0
});
iOS系统,Android系统
可提供的1.0.0及更高版本
获取当前闪关灯状态
getFlashlight(callback(ret))
ret:
{
status: true, //布尔型;是否获取成功
flashlight: 'off' //字符串类型;当前录像机的闪光灯状态,取值范围如下:
//on:打开
//off:关闭
//auto:自动
}
var videoRecorder = api.require('videoRecorder');
videoRecorder.getFlashlight(function(ret) {
if (ret.status) {
api.alert({msg: JSON.stringify(ret)});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置闪关灯,在 iOS 平台上,前置摄像头打开时不支持操作闪光灯
setFlashlight({params})
flashlight:
var videoRecorder = api.require('videoRecorder');
videoRecorder.setFlashlight({
flashlight: 'on'
});
iOS系统,Android系统
可提供的1.0.0及更高版本
获取当前占用的摄像头
getCamera(callback(ret))
ret:
{
status: true, //布尔型;是否获取成功
camera: 'front' //字符串类型;当前录像机的占用的摄像头,取值范围如下:
//front:前置摄像头
//back:后置摄像头
//unspecified:未启用
}
var videoRecorder = api.require('videoRecorder');
videoRecorder.getCamera(function(ret) {
if (ret.status) {
api.alert({msg: JSON.stringify(ret)});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置前置/后置摄像头
setCamera({params})
camera:
animation:
var videoRecorder = api.require('videoRecorder');
videoRecorder.setCamera({
camera: 'back'
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置当前录像机对焦模式,配合 setFocusRegion 接口使用
setFocusMode({params})
focusMode:
var videoRecorder = api.require('videoRecorder');
videoRecorder.setFocusMode({
focusMode: 'auto'
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置当前录像机对焦区域,需要跟 setFocusMode 接口同时使用。
若 setFocusBox 接口内 autoHide 参数为非 0 数字,则显示的聚焦提示框会在 autoHide 毫秒后自动隐藏。
若 setFocusBox 接口内 animation 参数为 true,则显示/隐藏聚焦提示框时会有动画。
setFocusRegion({params})
region:
{
x: 20, //数字类型;聚焦区域中点 x 坐标
y: 20, //数字类型;聚焦区域中点 y 坐标
w: 60, //数字类型;聚焦区域的宽,在 iOS 平台上忽略此参数(系统自动设置)
h: 60 //数字类型;聚焦区域的高,在 iOS 平台上忽略此参数(系统自动设置)
}
var videoRecorder = api.require('videoRecorder');
videoRecorder.setFocusRegion({
region: {
x: 20,
y: 20,
w: 60,
h: 60
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置当前录像机对焦提示框样式
注意:只需在需要修改对焦框样式的时候设置一次即可,不必在click事件里每次都设置
setFocusBox({params})
box:
{
width: 2.0, //(可选项)数字类型;提示框边框粗细,icon参数有值时本参数无效;默认:2.0
color: '#ADFF2F',//(可选项)字符串类型;提示框边框颜色,icon参数有值时本参数无效,支持rgb、rgba、#;默认:#ADFF2F
maxSize: 80.0, //(可选项)数字类型;提示框放大时的边长;默认:80.0
minSize: 60.0 //(可选项)数字类型;提示框缩小时的边长;默认:60.0
}
icon:
autoHide:
animation:
var videoRecorder = api.require('videoRecorder');
videoRecorder.setFocusBox({
box: {
width: 1,
color: '#ff0',
maxSize: 100,
minSize: 60
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
隐藏对焦提示框
hideFocusBox({params})
var videoRecorder = api.require('videoRecorder');
videoRecorder.hideFocusBox();
iOS系统,Android系统
可提供的1.0.0及更高版本
事件监听
addEventListener({params}, callback(ret))
name:
ret:
{
x: 100, //数字类型;触发点的 x 坐标
y: 100 //数字类型;触发点的 y 坐标
}
var videoRecorder = api.require('videoRecorder');
videoRecorder.addEventListener({
name: 'click'
}, function(ret) {
if (ret) {
api.alert({msg: JSON.stringify(ret)});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
开始录像后的监听,此接口只适用于android;
startCallback(callback(ret))
ret:
{
status: true, //布尔类型;录像是否在进行
}
var videoRecorder = api.require('videoRecorder');
videoRecorder.startCallback(function(ret) {
if (ret) {
api.alert({msg: JSON.stringify(ret)});
}
});
Android系统
可提供的1.0.5及更高版本
拍照
takePhoto({params}, callback(ret))
album:
path:
quality:
ret:
{
status: true, //布尔类型;是否拍照并保存成功(保存到相册或保存到指定路径都视为保存成功)
path: '', //字符串类型;拍摄照片存在本地的绝对路径
}
var videoRecorder = api.require('videoRecorder');
videoRecorder.takePhoto({
album: false,
path: 'fs://videoRecorder'
}, function(ret) {
if (ret.status) {
api.alert({msg: JSON.stringify(ret)});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
对录制视频截图,本接口暂仅支持iOS端
videoShot({params}, callback(ret))
album:
path:
ret:
{
status: true, //布尔类型;是否截图并保存成功(保存到相册或保存到指定路径都视为保存成功)
path: '', //字符串类型;拍摄截图存在本地的绝对路径
}
var videoRecorder = api.require('videoRecorder');
videoRecorder.videoShot({
album: false,
path: 'fs://videoRecorder'
}, function(ret) {
if (ret.status) {
api.alert({msg: JSON.stringify(ret)});
}
});
iOS系统
可提供的1.0.0及更高版本
获取当前设备方向
ret:
{
orientation: 'unknown' //字符串类型;当前设备方向,取值范围如下:
//unknown:未知
//portrait:竖直,home键在下面
//portraitUpsideDown:竖直,home键在上面
//left:水平,home键在右边
//right:水平,home键在左边
//faceUp:平放,屏幕朝上,iOS端暂不支持
//faceDown:平放,屏幕朝下,iOS端暂不支持
}
var videoRecorder = api.require('videoRecorder');
videoRecorder.getDeviceOrientation(function(ret) {
api.alert({msg: JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的1.0.6及更高版本
视频音频合成,本接口仅支持iOS端
compose({params}, callback(ret))
videoUrl:
audioUrl:
ret:
{
status: true, //布尔类型;是否成功
path: '', //字符串类型;视频存在本地的绝对路径
}
var videoRecorder = api.require('videoRecorder');
videoRecorder.compose({
videoUrl:'',
audioUrl: 'fs://videoRecorder'
}, function(ret) {
if (ret.status) {
api.alert({msg: JSON.stringify(ret)});
}
});
iOS系统
可提供的1.1.7及更高版本
为帮助用户更好更快的使用插件,论坛维护了一个示例,示例中包含示例代码、知识点讲解、注意事项等,供您参考。