meHaoTian
meHaoTian
  • 发布:2019-01-16 10:53
  • 更新:2019-03-12 14:47
  • 阅读:888

uni-app 拍摄视频限制最大长度解决方案

分类:uni-app

因为uni-app的平台差异问题,所以无法直接限制视频的长度,类似与微信朋友圈拍摄十秒视频。现在提供一种App端可以实现的解决方案。

安卓解决方案

关联阅读
安卓使用njs来实现视频最大播放时长

      // 安卓关键代码  
const VIDEOZOOM = 200;  
let MediaStore = plus.android.importClass('android.provider.MediaStore');  
let Intent = plus.android.importClass('android.content.Intent');  
// 导入后可以使用new方法创建类的示例对象  
let intent = new Intent('android.media.action.VIDEO_CAPTURE');  
intent.putExtra('android.intent.extra.videoQuality', 1); //0 means low quality, 1 means high quality  
//intent.putExtra("android.provider.MediaStore.EXTRA_OUTPUT", url);  
intent.putExtra('android.intent.extra.durationLimit', 10); //设置录像时间  
let main = plus.android.runtimeMainActivity();  
main.startActivityForResult(intent, VIDEOZOOM);  
//获取返回参数  
main.onActivityResult = function(requestCode, resultCode, data) {  
    let context = main;  
    plus.android.importClass(data);  
    let uri = data.getData();  
    let resolver = context.getContentResolver();  
    plus.android.importClass(resolver);  
    let cursor = resolver.query(uri, null, null, null, null);  
    plus.android.importClass(cursor);  
    cursor.moveToFirst();  
    let column = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);  
    // 获取录制的视频路径  
    let filePath = cursor.getString(column);  
    // 解析视频文件的属性  
    plus.io.resolveLocalFileSystemURL(  
        filePath,  
        (entry) => {  
            console.log(entry.fullPath)  
            entry.file(function(file) {  
                 console.log("size=="+file.size);   
                 console.log("name=="+file.name);  
            });  
        },  
        (e) => {  
            console.log("Resolve file URL failed: " + e.message);  
        }  
    );  
};  

ios解决方案

关联阅读
ios 直接使用5+ Api 就可以实现相关功能

       // ios关键代码  

let cmr = plus.camera.getCamera();  
let res = cmr.supportedVideoResolutions[0];  
let fmt = cmr.supportedVideoFormats[0];  
cmr.startVideoCapture(  
    function(path) {  
        plus.io.resolveLocalFileSystemURL(  
            path,  
            (entry) => {  
                console.log(entry.fullPath)  
                entry.file(function(file) {  
                  console.log("size=="+file.size);   
                  console.log("name=="+file.name);  
                });  
            },  
            (e) => {}  
        );  
    },  
    function(error) {  
        console.log("Resolve file URL failed: " + e.message);  
    }, {  
        resolution: res,  
        format: fmt,  
        videoMaximumDuration:10  
    }  
);  

Tips

  • 安卓端使用njs,因为不同root的问题会有部分手机不支持

具体使用

详见附件,把代码进行简单整合,并判断平台 ,可以直接调用

video.camera({  
    time: 10,  
    success: e => {  
        console.log("path=="+e.fullPath);   
        console.log("size=="+e.file.size);   
        console.log("name=="+e.file.name);  
        console.log(e);  
    }  
});  
2 关注 分享
DCloud_UNI_Trust ___K

要回复文章请先登录注册

810552824@qq.com

810552824@qq.com

设置摄制时间之后,并没有自动停止录制呀大神,还是需要手动点击停止按钮。
2019-03-12 14:47
Ahao

Ahao

设置录像时间 没有作用,而且返回不了filePath
2019-02-18 15:48
___K

___K

分辨率的话只有0和1的设置吗?要么文件太大了,要么视频太模糊了_(¦3」∠)_
2019-01-28 16:55
___K

___K

回复 ___K: 质量看到了,0和1o(* ̄︶ ̄*)o
2019-01-28 16:51
___K

___K

赞,不过问一下大佬,分辨率和保存路径在哪里设置?
2019-01-28 16:49
DCloud_UNI_Neil

DCloud_UNI_Neil

回复 qshi1123@163.com: 哪里出错说清楚啊
2019-01-19 20:48
qshi1123@163.com

qshi1123@163.com

不能用啊,报错....
2019-01-19 20:34
1046865524@qq.com

1046865524@qq.com

赞一个,大佬
2019-01-16 18:04