Nehmen wir an, ich habe eine ArrayBuffer
welche eine mp4
Datei ist. Ich möchte ein neues ArrayBuffer
mit einigen zusätzlichen Bytes erstellen, die als Header-Informationen verwendet werden, und dann den mp4
Puffer im Rest des neuen ArrayBuffer
speichern.Ein ArrayBuffer in einen anderen ArrayBuffer mit einem Offset lesen/schreiben/kopieren
// ... 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
nun an diesem Punkt kann ich nicht herausfinden, wie der Inhalt von data
in den neuen ab
Puffer zu schreiben, so dass am Ende habe ich eine ArrayBuffer
die drei Gruppen von Zahlen in der enthält Anfang, zusammen mit dem gesamten Inhalt des Videos.
Ich habe versucht, mit dem folgenden:
view.setInt32(10, data.buffer)
und obwohl ich keine Fehler kam, wurden die Daten nicht tatsächlich in den Puffer geschrieben. Ich war nicht in der Lage das Video in eine Datei zu schreiben und spielen es:
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();
}
In der obigen Funktion, die alle die Zahlen, die ich abrufen richtig sind, aber wenn ich versuche, die Nutzdaten in eine Datei zu schreiben, die Datei ist die richtige Größe, aber es ist beschädigt.
file size: 5253880
buffer size: 5253890
-- reading data
first header: 29102
second header: 18282
third header: 576
new file size: 5253880
So kann ich nicht sagen, ob es falsch in der neuen ArrayBuffer
gespeichert ist wird, oder ob ich den Puffer falsch bin Extrahieren - aber die test.mp4
, die nicht die richtigen binären Daten enthält geschrieben wird.
Kannst du nicht 'view.setInt32 (10, data)' '? und dann den neuen ArrayBuffer mit 'view.buffer' abrufen – Sachin
@Sachin - Ich habe meine Frage basierend auf Ihrem Kommentar aktualisiert und kann nicht überprüfen, ob das Speichern oder Extrahieren der Daten das Problem ist. –
@Sachin - falls Sie interessiert sind, wie es geht, habe ich eine Lösung gefunden. –