虫雪浓
虫雪浓
  • 发布:2019-01-16 10:53
  • 更新:2024-03-12 11:00
  • 阅读:11953

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);  
    }  
});  
5 关注 分享
Trust ___K _嘻嘻嘻_ ZFPartric 喜欢技术的前端

要回复文章请先登录注册

灵魂摆渡

灵魂摆渡

回复 灵魂摆渡 :
调用这个的时候没有主动请求权限
2019-05-11 14:38
灵魂摆渡

灵魂摆渡

回复 32435 :
现在知道报这个错是什么原因了,main.startActivityForResult(intent, VIDEOZOOM);调用这个的时候,没有摄像头的权限,但是又不知道怎么获取权限
2019-05-11 14:38
32435

32435

回复 灵魂摆渡 :
出现同样问题,之前是不报错的
2019-05-10 19:47
灵魂摆渡

灵魂摆渡

怎么解决,急
2019-05-08 09:25
灵魂摆渡

灵魂摆渡

thirdScriptError
09:23:57.277 Event Handler Error @ pages/mine/skiil#handleEvent
09:23:57.307 23:53.710 28024 28054 I console : undefined__ERROR
报这个错
2019-05-08 09:25
灵魂摆渡

灵魂摆渡

let main = plus.android.runtimeMainActivity();
main.startActivityForResult(intent, VIDEOZOOM);
这里有报错
2019-05-08 09:24
y***@163.com

y***@163.com

大佬,ios端点击拍摄视频没反应。
2019-04-28 16:19
8***@qq.com

8***@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