当前位置: 首页 > 知识库问答 >
问题:

使用uniapp打包h5后选择或拍摄视频时报错:API `chooseVideo` is not yet implemen,如何解决?

方长卿
2024-07-08

使用uniapp打包h5后选择或拍摄视频时报错:API chooseVideo is not yet implemen

在dev模式下,通过谷歌浏览器是能正常弹出选择对话框,但是发行后就不行,尝试升级最新的Hbuild,问题依然存在,

共有2个答案

汪迪
2024-07-08

原因就是提示的:API chooseVideo is not yet implemen

对应的API没有实现。

可以判断一下平台,针对H5场景使用:

<input type="file" accept="video/*" capture="camcorder" onchange="change()">

capture:
user 前置
environment 后置
camera 相机
camcorder 摄像机
microphone 录音
filesystem

太古董的手机,也不兼容,自行评估是否可以放弃古董用户。

束帅
2024-07-08

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,它允许开发者编写一次代码,发布到多个平台,包括 iOS、Android、H5、以及各种小程序等。然而,由于不同平台的能力差异,一些原生API可能在某些平台上是无法直接使用的。

针对你的问题,chooseVideo 是用于选择或拍摄视频的API,但在H5平台上,由于浏览器安全限制和HTML5标准本身的能力限制,这个API可能无法直接实现。

要解决这个问题,你可以考虑以下几种方法:

  1. 使用H5的原生<input type="file">:
    虽然 chooseVideo 可能不支持H5,但你可以使用原生的HTML <input type="file" accept="video/*"> 来让用户选择视频文件。然后你可以使用JavaScript的 FileReader API 来读取和处理这些文件。

    示例代码:

    <input type="file" accept="video/*" capture="camcorder" @change="handleVideoChange">
    
    <script>
    export default {
        methods: {
            handleVideoChange(e) {
                let file = e.target.files[0];
                if (file) {
                    let reader = new FileReader();
                    reader.onload = (e) => {
                        // 你可以在这里处理视频文件,例如上传到服务器
                        console.log(e.target.result);
                    };
                    reader.readAsDataURL(file);
                }
            }
        }
    }
    </script>
  2. 使用第三方库或组件:
    你可以查找是否有第三方库或组件为uni-app的H5版本提供了类似的视频选择功能。这些库可能已经处理了浏览器兼容性和安全限制问题。
  3. 条件编译:
    在uni-app中,你可以使用条件编译来根据平台选择不同的代码。对于H5平台,你可以使用上述的原生HTML5方法来处理视频选择;对于其他原生平台(如iOS、Android、小程序等),则可以继续使用 chooseVideo

    示例代码(使用uni-app的条件编译):

    <template>
        <view v-if="platform !== 'h5'">
            <!-- 原生平台的代码,使用chooseVideo -->
        </view>
        <view v-else>
            <!-- H5平台的代码,使用<input type="file"> -->
            <input type="file" accept="video/*" capture="camcorder" @change="handleVideoChange">
        </view>
    </template>
    
    <script>
    // 在这里检查平台
    export default {
        data() {
            return {
                platform: uni.getSystemInfoSync().platform // 获取平台信息
            };
        },
        // ... 省略其他方法和代码
    }
    </script>
  4. 考虑用户体验和平台兼容性:
    不同的平台和设备对于视频录制和选择的支持能力是不同的。因此,在设计和实现这样的功能时,你需要考虑用户体验和平台兼容性。例如,不是所有的浏览器都支持 capture="camcorder" 属性来直接录制视频。

希望这些方法可以帮助你解决问题。如果你有其他关于uni-app或前端开发的问题,也欢迎随时提问。

 类似资料:
  • 我想用camera2 API录制视频时捕捉图像。 null camera2 API是新的。所以谷歌上没有更多的例子。 有人对此有什么想法吗?比如在Android中如何在录音时捕捉照片?

  • 我必须做一个按钮,将提供从画廊或从相机选择图像。 结果是有效的。如果我从图库中选择,图像查看器将查看它,如果我选择从相机拍照,它也有效。问题是,在我的show FileChooser()方法中,我所有的意图都在同时运行,所以当我从图库中选择时,相机仍然运行。我选择相机,图库也在打开。我认为我应该在切换案例模式下实现我的代码,但我不明白如何做到这一点。请帮助解决我的初学者问题。

  • 我想用montemagno库制作一个视频: 这段代码在Android上运行得非常好。在iOS上,它会在生产过程中崩溃。我无法调试此代码,因为它返回。模拟器没有摄像头,因此无法继续。 我试着部署到一个真正的iPhone,但协同设计总是失败,这些配置文件是世界上最糟糕的。 我知道它至少达到了显示“无相机”的程度,所以初始化功能似乎可以工作。因此,我认为问题出在TakeVideoAsync()上。 它甚

  • 我想把我的混合应用程序的一些截图itunes自动连接。我正在运行Ubuntu 14.04. chromeDrive2.15.322448 使用Selenium和Xvfb自动截图很容易。但是要得到视网膜截图并不容易。 我用更高的dpi启动了我的Xvfb: 当我检查显示信息时,一切似乎都是正确的: 然后我像这样启动我的chromedriver 在完成了一些其他无聊的代码后,我截图: 这不工作。屏幕截图

  • uniapp 页面获取 webview 提交的参数,且 webview 的 html 是使用 uniapp 打包的,点击 webview 页面提交对应的 id。 导入了 uni-webview-js 使用可以成功接收到数据,但是不知道如何将数据返回。

  • 我需要使用Sikuli的自动化,但我无法采取截图。问题是,当我点击“截屏”或“创建区域”时,IDE会被隐藏,但选择区域选项不会出现....