[英]HTML5 read video metadata of mp4
Using HTML5 I am trying to get the attribute (ie rotation), located in the header of a mp4 (I play it using a video tag), to do this I am trying to get the bytes that make up the header, and knowing the structure, find this atom. 使用HTML5我试图获取位于mp4标题中的属性(即旋转)(我使用视频标签播放),为此我尝试获取组成标题的字节,并知道结构,找到这个原子。
Does anyone know how to do this in javascript? 有谁知道如何在JavaScript中执行此操作?
I do not think you can extract such detailed metadata from a video, using HTML5 and its video-tag. 我不认为您可以使用HTML5及其视频标签从视频中提取此类详细元数据。 The only things you can extract (video length, video tracks, etc.) are listed here:
此处列出了您可以提取的唯一内容(视频长度,视频轨道等):
http://www.w3schools.com/tags/ref_av_dom.asp http://www.w3schools.com/tags/ref_av_dom.asp
Of course, there might be special additional methods available in some browsers, but there is no "general" approach - you would need more than the existing methods of HTML5. 当然,在某些浏览器中可能会有一些特殊的附加方法,但是没有“通用”方法 - 您需要的不仅仅是HTML5的现有方法。
You can use mediainfo.js
, It's a porting of mediainfo
(cpp) in javascript compiled with emsciptem
. 您可以使用
mediainfo.js
,这是一个移植mediainfo
编译(CPP)在JavaScript emsciptem
。
Here is a working example: https://mediainfo.js.org/ 这是一个工作示例: https : //mediainfo.js.org/
You will need to include the js/mediainfo.js
file and put mediainfo.js.mem
file in the same folder. 您需要包含
js/mediainfo.js
文件并将mediainfo.js.mem
文件放在同一文件夹中。
You need to check the sources on this file to see how it works: https://mediainfo.js.org/js/mediainfopage.js 您需要检查此文件中的源代码以查看其工作原理: https : //mediainfo.js.org/js/mediainfopage.js
[...]
function parseFile(file) {
if (processing) {
return;
}
processing = true;
[...]
var fileSize = file.size, offset = 0, state = 0, seekTo = -1, seek = null;
mi.open_buffer_init(fileSize, offset);
var processChunk = function(e) {
var l;
if (e.target.error === null) {
var chunk = new Uint8Array(e.target.result);
l = chunk.length;
state = mi.open_buffer_continue(chunk, l);
var seekTo = -1;
var seekToLow = mi.open_buffer_continue_goto_get_lower();
var seekToHigh = mi.open_buffer_continue_goto_get_upper();
if (seekToLow == -1 && seekToHigh == -1) {
seekTo = -1;
} else if (seekToLow < 0) {
seekTo = seekToLow + 4294967296 + (seekToHigh * 4294967296);
} else {
seekTo = seekToLow + (seekToHigh * 4294967296);
}
if(seekTo === -1){
offset += l;
}else{
offset = seekTo;
mi.open_buffer_init(fileSize, seekTo);
}
chunk = null;
} else {
var msg = 'An error happened reading your file!';
console.err(msg, e.target.error);
processingDone();
alert(msg);
return;
}
// bit 4 set means finalized
if (state&0x08) {
var result = mi.inform();
mi.close();
addResult(file.name, result);
processingDone();
return;
}
seek(l);
};
function processingDone() {
processing = false;
$status.hide();
$cancel.hide();
$dropcontrols.fadeIn();
$fileinput.val('');
}
seek = function(length) {
if (processing) {
var r = new FileReader();
var blob = file.slice(offset, length + offset);
r.onload = processChunk;
r.readAsArrayBuffer(blob);
}
else {
mi.close();
processingDone();
}
};
// start
seek(CHUNK_SIZE);
}
[...]
// init mediainfo
miLib = MediaInfo(function() {
console.debug('MediaInfo ready');
$loader.fadeOut(function() {
$dropcontrols.fadeIn();
window['miLib'] = miLib; // debug
mi = new miLib.MediaInfo();
$fileinput.on('change', function(e) {
var el = $fileinput.get(0);
if (el.files.length > 0) {
parseFile(el.files[0]);
}
});
});
Here is the Github address with the sources of the project: https://github.com/buzz/mediainfo.js
这是Github地址与项目的来源:
https://github.com/buzz/mediainfo.js
: https://github.com/buzz/mediainfo.js
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.