Ich bin ein fragmentiertes mp4 für html5-Streaming erstellen, mit dem folgenden Befehl:Flush & Latency Ausgabe mit fragmentierten MP4 Creation in FFMPEG
-i rtsp://172.20.28.52:554/h264 -vcodec copy -an -f mp4 -reset_timestamps 1 -movflags empty_moov+default_base_moof+frag_keyframe -loglevel quiet -
- „-i rtsp: //172.20.28.52: 554/h264 "weil die Quelle h264 im rtp-Paketstrom von einer IP-Kamera ist. Zu Testzwecken wird die Kamera mit GOP von 1 gesetzt (d. H. Alle Rahmen sind Schlüsselrahmen)
- "-vcodec copy", weil ich keine Umcodierung benötige, nur Remuxen zu MP4.
- "-movflags empty_moov + default_base_moof + frag_keyframe" zum Erstellen eines fragmentierten mp4 gemäß der Spezifikation der Medienquellenerweiterungen.
- "-" am Ende, um die mp4 auf stdout auszugeben. Ich nehme die Ausgabe und sende sie über Web-Sockets an den Webclient.
Alles funktioniert gut, erwarten Sie ein Latenzproblem, das ich versuche zu lösen. Wenn ich jedes Mal eine Daten kommen aus stdout, mit dem Zeitstempel der Ankunft anmelden, erhalte ich diese Ausgabe:
16/06/2015 15: 40: 45,239 Datengröße = 24
bekam16/06/2015 15: 40: 45,240 bekam Datengröße = 7197
16/06/2015 15: 40: 45,241 Datengröße bekam = 32768
16/06/2015 15: 40: 45,241 hat Datengröße = 4941
16/06/2015 15 40: 45,241 bekam Datengröße = 12606
16/06/2015 15: 40: 45,241 bekam Datengröße = 6345
16/06/2015 15: 40: 45,241 Daten bekam size = 6339
16/06/2015 15: 40: 45,242 bekam Datengröße = 6336
16/06/2015 15: 40: 45,242 Datengröße bekam = 6361
16/06/2015 15: 40: 45,242 bekam Datengröße = 6337
16/06/2015 15: 40: 45,242 bekam Datengröße = 6331
16/06/2015 15: 40: 45,242 Datengröße bekam = 6359
16/06/2015 15: 40: 45,243 Daten size = 6346
bekam16/06/2015 15: 40: 45,243 bekam Datengröße = 6336
16/06/2015 15: 40: 45,243 Datengröße bekam = 6338
16/06/2015 15: 40: 45,243 hat Datengröße = 6357
16/06/20 15 15: 40: 45,243 bekam Datengröße = 6357
16/06/2015 15: 40: 45,243 Datengröße = 6322 bekam
16/06/2015 15:40:45.erhielt 243 Datengrße = 6359
16/06/2015 15: 40: 45,244 Datengrße erhielt = 6349
16/06/2015 15: 40: 45,244 erhielt Datengrße = 6353
16/06/2015 15: 40: 45,244 bekam Datengröße = 6382
16/06/2015 15: 40: 45,244 Datengröße bekam = 6403
16/06/2015 15: 40: 45,304 Datengröße bekam = 6393
16.06.2015 15: 40: 4 erhielt 5.371 Datengrße = 6372
16/06/2015 15: 40: 45,437 Datengrße erhielt = 6345
16/06/2015 15: 40: 45,504 erhielt Datengrße = 6352
16/06/2015 15: 40: 45,571 bekam Datengröße = 6340
16/06/2015 15: 40: 45,637 Datengröße bekam = 6331
16/06/2015 15: 40: 45,704 Datengröße bekam = 6326
16/06/2015 15:40 erhielt 45,771 Datengrße = 6360
16/06/2015 15: 40: 45,838 Datengrße erhielt = 6294
16/06/2015 15: 40: 45,904 Datengrße = 6328
16 erhielt/06/2015 15: 40: 45,971 erhielt Größe data = 6326
16/06/2015 15: 40: 46,038 erhielt Datengrße = 6326
16/06/2015 15: 40: 46,105 Datengrße bekam = 6340
16/06/2015 15: 40: 46,171 bekam Größe data = 6341
16/06/2015 15: 40: 46,238 bekam Datengröße = 6332
Wie Sie sehen können, werden die ersten 23 Zeilen (die Daten von etwa 1,5 Sekunden enthalten von Video) kommen fast sofort an, und dann ist die Verzögerung zwischen jeweils 2 aufeinanderfolgenden Zeilen ~ 70 ms, was sinnvoll ist, weil das Video 15 Bilder pro Sekunde ist. Dieses Verhalten führt zu einer Wartezeit von ca. 1,5 Sekunden.
Es sieht aus wie ein Spülungsproblem, weil ich keinen Grund sehe, warum ffmpeg die ersten 23 Bilder im Speicher halten müsste, besonders da jedes Bild ein eigenes Fragment im mp4 ist. Ich konnte jedoch keine Methode finden, die ffmpeg veranlassen würde, diese Daten schneller zu löschen.
Hat jemand einen Vorschlag?
würde Ich mag zu beachten, dass dies eine Follow-up-Frage zu dieser ist: Live streaming dash content using mp4box
Es ist mir aufgefallen, dass Sie Kontrolle über die 'blocksize' haben, die für die Pufferung der Ausgabe verwendet wird. Überprüfen Sie http://www.ffmpeg.org/ffmpeg-all.html#toc-pipe und sehen Sie, ob das Optimieren dieses Wertes Ihnen dort helfen kann. –
@PabloMontilla Ich habe versucht, mit verschiedenen Werten von blocksize zu spielen und obwohl es die Ausgabe in irgendeiner Weise bewirkt hat, hat es die anfängliche Verzögerung nicht gelöst. – galbarm
Hallo @galbarm! Ich kann das Video nicht auf einer Seite mit den 'ffmpeg'-Parametern ausführen, wobei ich immer' Skipping unrecognized top-level box: ftyp' bekomme. (h264 ip cam). Ich habe auch versucht, '-vcodec' in' libx264' zu ändern. In diesem Fall bekomme ich 'Skipping unrecognized top-level box: mdat'. Kannst du bitte deinen Code näher beschreiben oder irgendwo angeben? Der interessanteste Teil ist der ".addSourceBuffer" -Param, d.h. die Codec-Zeichenkette. Danke im Voraus! – zarkone