我想在JavaScript中動態生成一個比特流,例如一個大型的OGG視頻。 是否可以告訴瀏覽器向位流請求JavaScript函數而不是向某個位置發送HTTP-GET-Request?是否有可能在JS中爲HTML5視頻源生成比特流?
將數據提供給視頻標籤的唯一可能方式是我找到的數據:-URL。但是這需要將整個視頻編碼到文檔中。
對於大型視頻來說這是一個糟糕的解決方案,通常會進行流式傳輸。 AFAIK不能將更多數據動態添加到數據URL。
有誰知道這是可能的嗎?
我想在JavaScript中動態生成一個比特流,例如一個大型的OGG視頻。 是否可以告訴瀏覽器向位流請求JavaScript函數而不是向某個位置發送HTTP-GET-Request?是否有可能在JS中爲HTML5視頻源生成比特流?
將數據提供給視頻標籤的唯一可能方式是我找到的數據:-URL。但是這需要將整個視頻編碼到文檔中。
對於大型視頻來說這是一個糟糕的解決方案,通常會進行流式傳輸。 AFAIK不能將更多數據動態添加到數據URL。
有誰知道這是可能的嗎?
現在,這應該有可能與MediaSource API。
這裏是從上面的鏈接的例子:
var video = document.querySelector('video');
var assetURL = 'frag_bunny.mp4';
// Need to be specific for Blink regarding codecs
// ./mp4info frag_bunny.mp4 | grep Codec
var mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
if ('MediaSource' in window && MediaSource.isTypeSupported(mimeCodec)) {
var mediaSource = new MediaSource();
//console.log(mediaSource.readyState); // closed
video.src = URL.createObjectURL(mediaSource);
mediaSource.addEventListener('sourceopen', sourceOpen);
} else {
console.error('Unsupported MIME type or codec: ', mimeCodec);
}
function sourceOpen (_) {
//console.log(this.readyState); // open
var mediaSource = this;
var sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
fetchAB(assetURL, function (buf) {
sourceBuffer.addEventListener('updateend', function (_) {
mediaSource.endOfStream();
video.play();
//console.log(mediaSource.readyState); // ended
});
sourceBuffer.appendBuffer(buf);
});
};
function fetchAB (url, cb) {
console.log(url);
var xhr = new XMLHttpRequest;
xhr.open('get', url);
xhr.responseType = 'arraybuffer';
xhr.onload = function() {
cb(xhr.response);
};
xhr.send();
};
如果你的視頻編碼爲流媒體,它將被任何瀏覽器請求它逐步下載。這就是它的工作原理。您將需要OGG和MP4兩種格式,分別爲
FF/Chrome/IE9。
http://www.mediacollege.com/video/streaming/http.html
「的文件編碼」 沒有任何意義。該視頻由您的編碼器進行編碼,並且可以進一步進行流媒體優化設置(即以更低的比特率編碼第一個XX秒,以便更快啓動)。
我不知道Javascript是否可能,但你可以用Java或Javascript(?)播放器來做類似Cortado的事情。
謝謝,這很有用。我看到一個JavaScript解碼器在畫布上繪製框架。這顯然不是那麼快,也沒有聲音。但這都是一種解決方法。例如,Cortado需要Java。 – anty 2012-03-30 14:51:10
你的意思是用「數據:字符串」 - 正如人們可以在一個img標籤? (http://stackoverflow.com/questions/1207190/embedding-base64-images) – T4NK3R 2014-03-05 10:10:53