2012-03-13 14 views
5

JavaScriptなどでビットストリームを動的に生成したいとします。大規模なOGGビデオ。 一部の場所にHTTP-GET-Requestを送信するのではなく、ビットストリームのJavaScript関数を要求するようにブラウザに指示することはできますか?HTML5ビデオソースのJSでビットストリームを生成することは可能ですか?

私が見つけたビデオタグにデータを入力する唯一の方法は、data:-URLです。しかし、それはビデオ全体をドキュメントにエンコードする必要があります。

これは、通常はストリーミングされる大きな動画の場合、悪い解決策です。 AFAIKでは、データURLにデータを動的に追加することはできません。

どういうわけか、誰でも知っていますか?

+0

あなたが使用して意味ですか「データ:文字列を」 - 1は、IMGタグでできるよう? (http://stackoverflow.com/questions/1207190/embedding-base64-images) – T4NK3R

答えて

0

これは今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(); 
}; 
0

ビデオがストリーミング用にエンコードされている場合、そのビデオは要求しているブラウザによって徐々にダウンロードされます。それはちょうどそれが動作する方法です。

FF/Chrome/IE9にOGGとMP4の両方が必要です。 "文書上に符号化された"

http://www.mediacollege.com/video/streaming/http.html

はどんな意味がありません。動画はエンコーダによってエンコードされ、ストリーミング用に最適化する設定があります(つまり、最初のXX秒をより低いビットレートでエンコードしてより早く開始できます)。

1

Javascriptで可能かどうかわかりませんが、おそらくCortadoのようなJavaまたはJavaScript(?)プレーヤーでそのようなことを行うことができます。

http://www.flumotion.net/cortado/

+0

ありがとう、これは便利です。私はキャンバス上にフレームを描くどこかのJavaScriptデコーダを見ました。これは明らかに高速ではなく、音がありません。しかし、それはすべて回避策です。例えば、CortadoにはJavaが必要です。 – anty

関連する問題