无法在移动浏览器中提取本地视频文件持续时间
Cannot extract local video file duration in mobile browser
我正在使用文件输入从用户的移动设备捕获录制的视频。然后我想做的是以某种方式读取该文件,并确定它是否超过一定的持续时间(在本例中为30秒)。如果超过了该期限,则不允许将该文件上传到服务器。它在持续时间之内,那么它就可以了。
我可以在桌面上用javascript准确地检测文件的持续时间,但在移动端却不能,这正是我所需要的。这是我的代码:
onEndRecord = function(e) {
var file = e.target.files[0];
var videoElement = document.createElement('video');
document.body.appendChild(videoElement);
var fileURL = window.URL.createObjectURL(file);
videoElement.addEventListener('loadeddata', function(e) {
console.log('loadeddata',e.target.duration);
});
videoElement.onload = function () { // binding onload event
console.log('onload',videoElement.duration);
};
videoElement.src = fileURL;
}
有人知道怎么得到这个信息吗?手机端的持续时间报告为零。
我也试过通过文件阅读器api运行它:
readBlob = function(file){
console.log('readBlob',file);
var reader = new FileReader();
reader.onload = function (e) {
console.log('reader load');
var player = document.getElementById('videoReader');
player.addEventListener('loadeddata', function(e) {
console.log('loadeddata',e.target.duration);
player.play();
});
var fileURL = window.URL.createObjectURL(file);
player.src = fileURL;
}
reader.readAsDataURL(file);
}
我认为正在发生的事情是,loaddmetadata事件(或loadddata事件,如您的问题)只是不会在您正在测试的移动设备上触发,因此持续时间不可用于阅读,并呈现为0。点击这里查看与HTML5媒体元素规范相关的事件。注意,你可以对媒体元素使用loadstart事件,而不是onload事件来微调你的web应用程序。
通常在iOS上,事件将在用户交互时触发…在此之前没有(如canplay事件)。这是试图减少用户在移动设备上使用付费数据计划的带宽消耗的一个限制。这里为苹果描述了这一点。Android也是如此。
处理Web Audio API,你可以通过从decodeAudioData方法接收的缓冲区获得持续时间。这里有一些关于这个主题的信息。
您可以使用PHP或Java在服务器端读取这些信息,但这并不适合您的设计。
因此,您可以让用户在上传之前播放录制的样本以访问持续时间或,如果您知道录制视频的平均比特率和文件大小(文件API),那么您可以近似持续时间
通过使用FFMPEG的FFprobe服务解决了这个问题。我们只下载一小部分视频——大约4k就足够了——然后读取元数据。但是,对于quicktime,元数据位于视频的末尾,因此您必须将开头换成结尾。这是使用qt快速启动的修改版本完成的:
https://github.com/danielgtaylor/qtfaststart- 输入视频文件时获取视频持续时间
- 生成由文件输入在特定时间选择的视频文件的缩略图/快照
- Ziggeo,WebRTC无法读取视频文件
- 是否可以在不将其添加到DOM的情况下预加载和缓存视频文件
- 还通过jQuery更改替代HTML5视频文件/格式源
- jwplayer没有加载视频文件
- 如何从阵列上传多个视频文件
- 从S3获取视频文件元数据
- 如何缓存整个视频文件以供以后通过视频标签离线播放
- 通过 WebSocket 将视频文件发送到浏览器
- 如何设置视频文件的预览,从输入类型='文件'中选择
- Chrome 确实会加载一次视频文件,但不会加载两次
- Windows商店应用程序JS:使用WinJS.xhr上传视频文件
- Flowplayer 插件在 Win7:IE9 和 Firefox 中显示“HTML5 视频文件未找到”错误
- 如何将浏览器活动捕获到视频文件中
- 如何在 HTML 中降低视频文件的饱和度
- 如何在视频中添加视频文件.js 4.2.1.
- 有没有一种更快的方法来查找客户端和服务器端的所有图像、音频和视频文件类型
- PHP 从服务器下载视频文件
- 使用编解码器编码的视频文件.mov:Apple ProRes (apch) 无法通过 chrome 或 IE11 中的视