ArrayBuffer
がmp4
というファイルであるとします。私はヘッダー情報として使用されるいくつかの余分なバイトを持つ新しいArrayBuffer
を作成し、新しいArrayBuffer
の残りの部分にmp4
バッファーを格納したいと思います。オフセットを持つ別のArrayBufferにArrayBufferを読み書きする/コピーする
// ... assume the `data` variable is an existing ArrayBuffer with the contents
// of the mp4 video file.
var ab = new ArrayBuffer(10 + data.byteLength)
var view = new DataView(ab);
view.setInt32(0, 29102); // header information 1
view.setInt32(4, 18282); // header information 2
view.setInt16(8, 576); // header information 3
さて、この時点で、私は最後に私が持っているので、あること、新しいab
バッファにdata
の内容を書き込む方法を見つけ出すことはできませんで数字の3グループを含むArrayBuffer
ビデオの全体の内容とともに始まります。
私は、次を使用してみました:
view.setInt32(10, data.buffer)
と、私はエラーを得ないが、実際にデータがバッファに書き込まれていませんでした。私は、ファイルへのペイロードデータを書き込もうとただしたときに、私は検索数のすべてが、正しい、上記の関数で
function readPayload(ab) {
var view = new DataView(ab);
console.log(' first header: ' + view.getInt32(0)); // correct
console.log('second header: ' + view.getInt32(4)); // correct
console.log(' third header: ' + view.getInt16(8)); // correct
var data = new Buffer(ab.slice(10));
console.log('new file size: ' + data.byteLength); // correct length of mp4 file
var ws = fs.createWriteStream('test.mp4'); // this wrote a corrupt file
ws.write(data);
ws.end();
}
、ファイル:私は、ファイルにビデオを書いて、それを再生することができませんでした正しいサイズですが、破損しています。
file size: 5253880
buffer size: 5253890
-- reading data
first header: 29102
second header: 18282
third header: 576
new file size: 5253880
だから私はそれが間違って新しいArrayBuffer
に格納されているのかどうかわかりません、または私は間違ってバッファを抽出してるかどうか - が、書かれているtest.mp4
は正しいバイナリデータが含まれていません。
'view.setInt32(10、data)'だけできませんか? 'view.buffer'を使用して新しいArrayBufferを入手してください – Sachin
@Sachin - あなたのコメントに基づいて質問を更新し、データの格納または抽出が問題であるかどうかを検証することはできません。 –
@Sachin - あなたはそれができる方法に興味がある場合に備えて、私は解決策を見つけました。 –