Es gab viele Artikel über die Bereitstellung des Nginx-Streaming-Medienservers. Heute werde ich darüber sprechen, wie man den Stream auf den Server überträgt, während er in eine MP4-Datei transkodiert und gespeichert wird. Die Hauptverwendung ist hier ffmpeg.
1. Als Erstes ist zu beachten, dass der Befehl exec nicht verwendet werden kann. Das aufgerufene externe Programm wird automatisch beendet, wenn der Client-Push-Stream endet. Das Ergebnis ist, dass ffmpeg am Ende keine vollständige Codierung durchführen kann. Dieser Befehl eignet sich nur zum Pushen des empfangenen Datenverkehrs an andere Adressen.
2. Sie sollten exec_record_done mit dem Record-Befehl verwenden. Das heißt, nach Abschluss der Aufnahme werden die aufgenommenen Dateien automatisch transkodiert, um MP4-Dateien zu erhalten. Abhängig davon, ob der Befehl „record_interval“ verwendet wird, gibt es zwei verschiedene Situationen.
2A. Wenn record_interval nicht verwendet wird, wird die Transkodierung durchgeführt, nachdem das Streaming beendet wurde (d. h. nachdem die Aufzeichnung vollständig gestoppt wurde), und es wird keine Ausgabe vor diesem Zeitpunkt erhalten.
2B. Sie können festlegen, dass jede Aufnahme nach einer bestimmten Zeit neu gestartet wird, kombiniert mit dem Befehl „record_append on“, um sicherzustellen, dass sich das zuletzt aufgezeichnete Video in einer Datei befindet. Andernfalls wird für jede Aufnahme eine separate Datei erstellt. Nach Verwendung dieser beiden Befehle wird die Transkodierung in regelmäßigen Abständen durchgeführt, aber am Ende werden sie in derselben Datei ausgegeben (überschrieben). Der Vorteil besteht darin, dass die Transkodierung nahezu in „Echtzeit“ erfolgen kann. Der Nachteil besteht jedoch darin, dass ffmpeg wiederholt aufgerufen wird und Systemressourcen belegt.
3. Es ist zu beachten, dass die endgültigen transkodierten Dateien (Dauer), die mit den beiden oben genannten Methoden erhalten werden, gleich sind.
4. nginx.conf-Konfigurationsbeispiel
application hls {
live on;
hls on;
record all;
record_path /home/zhanghui/test;
#record_interval 10s;
#record_append on;
hls_path /tmp/app;
hls_fragment 5s;
# convert recorded file to mp4 format
exec_record_done '/usr/local/bin/ffmpeg' -y -i /home/zhanghui/test/livestream.flv -vcodec libx264 -f mp4 /home/zhanghui/test/test_record.mp4 2>>/home/zhanghui/test/test_record.log;
}
Nach dem Login kopieren
Das Obige stellt vor, wie man die Aufzeichnung und Transkodierung von Multimedia-Streams auf dem Nginx-Server realisiert, einschließlich der relevanten Aspekte. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.