Ich versuche, MP4-Video zu streamen, wie es von einem Webserver codiert ist. Ich glaube, ich habe die entsprechenden Flags verwendet, aber es funktioniert nicht richtig. Wenn ich das Video aus meinem Stream herunterlade und es mit VLC öffne, wird die Dauer korrekt angezeigt. Da ein Socket nicht suchbar ist, gehe ich davon aus, dass es die Metadaten zum Ende schreibt? Mein Chrome-Browser zeigt immer eine Dauer von 8 Sekunden an. Die ersten 8 Sekunden werden mit der normalen Geschwindigkeit abgespielt, aber danach wird die Pause-Taste zur Play-Taste und das Video wird sehr schnell wiedergegeben, wahrscheinlich so schnell wie es empfangen wurde. Das Audio wird jedoch mit normaler Geschwindigkeit wiedergegeben. Ich habe versucht, document.getElementById('myVid').duration = 20000
, aber es ist ein Readonly-Feld.
Ich frage mich, ob es überhaupt möglich ist, die Dauer in HTTP-Headern oder auf andere Weise explizit anzugeben? Ich kann keine Dokumentation darüber finden.
ffmpeg -i - -vcodec libx264 -acodec libvo_aacenc -ar 44100 -ac 2 -ab 128000 -f mp4 -movflags frag_keyframe+faststart pipe:1 -fflags +genpts -re -profile baseline -level 30 -preset fast
Um Wähler zu schließen, die denken, dass es nicht programmierungsbezogen ist, verwende ich es in meinem eigenen Server, den ich codiert habe, und ich muss die Dauer programmatisch über JavaScript einstellen oder den HTTP-Header setzen. Ich glaube, dass es sowohl zu ffmpeg als auch zu http-Headern gehören kann, deshalb habe ich es hier gepostet.
%Vor%exec-Funktion in diesem Stream-Transcoder-Modul
%Vor% Ich glaube, dass der Header X-Content-Duration
genau das ist, was Sie brauchen.
Mozilla-Dokumentation auf X-Content-Duration
*
* In der Dokumentation wird das OGG-Format diskutiert, aber gilt das Prinzip auch für andere Videoformate