Firebase Storage Video-Streaming

73

Ich arbeite an einer App mit Video-Streaming-Funktionalität. Ich verwende Firebase-Datenbank und Firebase-Speicher. Ich versuche, eine Dokumentation darüber zu finden, wie Firebase-Speicher mit Videodateien umgeht, kann aber nicht wirklich viel finden.

In den Dokumenten wird erwähnt, dass Firebase Storage mit anderen Google App-Diensten zusammenarbeitet, um CDN- und Video-Streaming zu ermöglichen, aber alle Suchanfragen scheinen in eine Sackgasse zu führen. Irgendein Rat?

gcas
quelle
3
Soweit ich weiß, gibt es keine vorgefertigten Integrationen zwischen Firebase Storage und CDN- oder Video-Streaming-Diensten. Können Sie einen Link zu der Dokumentation bereitstellen, in der Sie dies gesehen haben?
Frank van Puffelen
1
"Firebase Storage speichert Ihre Dateien in einem Google Cloud Storage-Bucket, der für die Standard-App von Google App Engine freigegeben ist, und macht sie sowohl über Firebase- als auch über Google Cloud-APIs zugänglich. Auf diese Weise können Sie Dateien von mobilen Clients über Firebase hochladen und herunterladen und Server ausführen -seitige Verarbeitung wie Bildfilterung oder Videotranscodierung mit Google Cloud Platform. " firebase.google.com/docs/storage/#key_functions
gcas
1
Ich versuche auch, Firebase-Speicher schnell zu verwenden, bin jedoch beim Festlegen der Domäne fehlgeschlagen. Ich denke, dass Firebase-Hosting schnell funktionieren kann, da Firebase-Hosting ein eigenes CDN hat, denke ich, dass es beim Firebase-Hosting nicht notwendig ist.
Mike Yang
1
@gcas Hast du eine Lösung gefunden?
Grantespo

Antworten:

57

Ich denke, es gibt verschiedene Arten von Video-Streaming, die unsere Antwort hier ändern könnten:

  • Live-Streaming (Abonnenten beobachten, wie ein Ereignis eintritt)
  • Youtube-Stil (ein Video posten und Endbenutzer nach Belieben ansehen)

Nachdem ich eine Live-Streaming-App im Periscope-Stil mit Firebase Storage und der Firebase-Echtzeitdatenbank erstellt habe, empfehle ich dringend davon ab - wir haben drei Sekunden-Chunks hochgeladen und sie über die Echtzeitdatenbank synchronisiert. Während es funktionierte (überraschend gut), gab es eine Latenz von ~ 5 Sekunden über sehr gutes Internet und es war auch nicht die effizienteste Lösung (schließlich laden Sie das Video hoch und speichern es, und es gab keine Transcodierung). . Ich empfehle die Verwendung eines WebRTC-Stils, der für den Videotransport entwickelt wurde, und die Verwendung der Echtzeitdatenbank für die Signalisierung neben dem Stream.

Auf der anderen Seite ist es definitiv möglich, mobiles YT auf Firebase-Funktionen aufzubauen. Der Trick hier besteht darin, das Video zu transkodieren (mit Zencoder oder Bitmovin, mehr hier: https://cloud.google.com/solutions/media/ ), um das hochgeladene Video in kleinere Teile mit unterschiedlichen Auflösungen (und) zu zerlegen In verschiedenen Formaten benötigt iOS beispielsweise HLS für das Streaming. Ihr Client kann Chunk-Informationen in der Echtzeitdatenbank speichern (Chunk-Name, verfügbare Auflösungen, Anzahl der Chunks) und diese Chunks im Verlauf des Videos aus dem Speicher herunterladen.

Mike McDonald
quelle
1
Vielen Dank für die Tipps und für das Teilen Ihrer Erfahrungen. Die Anforderungen meiner App ähneln eher Option 2. Benutzer können kurze Videoclips hochladen, die andere Benutzer später streamen können. Ich habe tatsächlich den Artikel gelesen, den Sie mir neulich geschickt haben, aber ich hatte gehofft, dass es eine engere Integration zwischen den beiden Diensten geben könnte, die dort nicht dokumentiert ist. Klingt nach Firebase-Speicher und GCP-Preisen für diese Aufgaben, ist es möglicherweise besser, einen anderen Dienst für das Video-Hosting in Betracht zu ziehen. Ich beschäftige mich gerade mit Sprout Video und Vimeo Pro.
gcas
1
Ich würde auch ziggeo.com besuchen , sie sind ziemlich einfach zu bedienen und haben möglicherweise alle Dinge, die Sie brauchen, um in diesem Bereich erfolgreich zu sein.
Mike McDonald
5
@gcas was hast du genau benutzt? Ich bin auch im selben Boot und benutze Firebase. Haben Sie Firebase-Speicher und Transcodierung mit einem anderen Dienst (z. B. Zencoder) verwendet?
Jason
1
Ich bin auch verwirrt über Vimeo Pro, wie Sie bereits erwähnt haben. Würde das Vimeo-Wasserzeichen nicht durch den Iframe angezeigt?
Jason
4
@MikeMcDonald, können Sie mehr darüber beschreiben, wie Sie Streaming im YT-Stil durchführen, insbesondere wie Sie Chunk-by-Chunk-Streaming durchführen, anstatt das gesamte Video von Firebase Storage herunterzuladen. Kann WebRTC auch für ein bis viele Video-Streaming verwendet werden, dh für Rundfunk?
Afeez Aziz
24

Wenn Sie ein Video von Firebase Storage dämpfen möchten, ist dies der beste Weg, den ich gefunden habe. Dies hängt von der Größe Ihrer Videodatei ab. Ich fordere nur 10-30 MB Dateien an, daher funktioniert diese Lösung gut für mich. Behandle die Firebase-URL einfach als normale URL:

String str = "fire_base_video_URL";
Uri uri = Uri.parse(str);

videoViewLandscape.setVideoURI(uri);
progressBarLandScape.setVisibility(View.VISIBLE);
videoViewLandscape.requestFocus();
videoViewLandscape.start();

Wenn Sie das Video schleifen möchten:

videoViewLandscape.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.setLooping(true);
    }
});

Wenn Sie vor dem Start des Videos einen Fortschrittsbalken anzeigen möchten, gehen Sie wie folgt vor:

videoViewLandscape.setOnInfoListener(new MediaPlayer.OnInfoListener() {
    @Override
    public boolean onInfo(MediaPlayer mp, int what, int extra) {
        if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END) {
            progressBarLandScape.setVisibility(View.GONE);
            return true;
        }
        else if(what == MediaPlayer.MEDIA_INFO_BUFFERING_START){
            progressBarLandScape.setVisibility(View.VISIBLE);
            return true;
        }
        return false;
    }
});

Dies ist nicht die beste Art, Dinge zu tun, aber es funktioniert für mich im Moment, bis ich einen guten Video-Streaming-Service finde.

Grantespo
quelle
3
Verwendet dies kein Chunking? Es sieht fast so aus, als würde die Videoquelle nur auf die Datei-URL verweisen. Ist das richtig? Funktioniert das in Ordnung
SeanMC
6

2020: Ja, Firebase-Speicher-Video-Streaming ist einfach und möglich.

Alle anderen Fragen legen nahe, dass Sie ein Protokoll wie HLS verwenden. Dies ist jedoch nur erforderlich, wenn Sie eine App für den Apple AppStore entwickeln, die Videos bereitstellt, die länger als 10 Minuten dauern.

In allen anderen Fällen können Sie Ihre Videos einfach in mp4 codieren und auf firebase hochladen. Ihre Kunden können dann die mp4 problemlos streamen. Stellen Sie einfach sicher, dass sich Ihr moov-Atom am Anfang Ihrer mp4-Datei befindet. Auf diese Weise können Sie das Video sofort abspielen, auch wenn es nicht vollständig geladen ist. Benutzer können dank variabler Bitanforderungen, die vom Firebase-Speicher unterstützt werden, auch vorwärts oder rückwärts springen.

Laden Sie zum Testen einfach ein Video in Ihren Firebase-Speicher hoch und öffnen Sie es in Ihrem Browser.

Skyy2010
quelle
Ich frage mich nur, ob die Videogröße 1,4 GB beträgt. Wenn man dies sieht, dann werden auch beim Download 1,4 GB gleichzeitig gezählt ??? (Preisgestaltung)
Marsho
wow, hätte das vor 3 Jahren nutzen können :)
grantespo
Fair Point, aber ohne HLS (oder DASH) verschwenden Sie immer noch die Bandbreite der Verbraucher, da Sie keine adaptiven Auflösungsströme verwenden. Nicht jedes Gerät möchte oder benötigt einen 1080p-Stream.
Davie
1
@ Dave ja, stimmt. Auch Ihre Kosten könnten von HLS oder DASH profitieren, da Sie auch für diese Bandbreite bezahlen müssen.
Skyy2010
5

Sie können HLS-Videos im Firebase Cloud Storage hosten. Es funktioniert ziemlich gut für mich. Der Trick besteht darin, die Wiedergabelistendateien so zu ändern .m3u8, dass sie das Präfix des Speicherordners und das ?alt=mediaSuffix für jeden Dateieintrag in der Wiedergabeliste enthalten:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:2.760000,
<folder_name>%2F1_fileSequence_0.ts?alt=media
#EXT-X-ENDLIST

Sie auch nicht wirklich haben , um serverseitige Transcodierungs verwenden, können Sie den Client haben, der das Video es tut uploads und sparen erheblich Kosten.

Ich habe hier ein vollständiges Tutorial mit Quellcode geschrieben: https://itnext.io/how-to-make-a-serverless-flutter-video-sharing-app-with-firebase-storage-including-hls-and- 411e4fff68fa

syonip
quelle
1
Hallo, wissen Sie, was in Bezug auf die Firebase-Preise passiert, wenn wir ein HLS-Video mit 200 MB in Blöcken von 10 MB haben und der Benutzer nur die Hälfte des Videos angesehen / gepuffert hat? Berechnen sie uns die Hälfte der gesamten MB Kosten? Und zweitens, wenn wir über Flutter sprechen, ist HLS alles, was wir für iOS und Android brauchen, oder? DASH ist nicht erforderlich
aytunch
Wie verwalten wir die Sicherheit mit diesen Blöcken von Videodateien und m3u8-Dateien? Angenommen, ich möchte nicht, dass einige Benutzer auf einige Videodateien zugreifen. Ist es möglich? Müssen wir schließlich Firebase Cloud Storage verwenden? Könnten wir stattdessen Firebase Storage verwenden?
Aytunch
In Bezug auf die Preisgestaltung haben Sie wahrscheinlich Recht, Ihnen wird nur das berechnet, was von Firebase abgerufen wird, und mit HLS holen Sie nur die nächsten paar Brocken ab.
syonip
Wie ich im Blog-Beitrag erwähnt habe, gibt es auf beiden Plattformen native Unterstützung für HLS, aber DASH wird nativ nur in Android unterstützt
syonip
Aus Sicherheitsgründen (auch im Blogbeitrag erwähnt) müssen Sie das Firebase-Token zum Dateinamen der m3u8-Dateien hinzufügen, bevor Sie sie abspielen können. Ich habe nicht getestet, aber es sollte funktionieren.
syonip
0

Wenn Sie eine YT-ähnliche App erstellen möchten, können Sie zuerst das Video komprimieren. Ich empfehle, diese Bibliothek zum Verwalten der Videokomprimierung zu verwenden. Ich empfehle die in diesem Link . Ich habe es geschafft, ein Video von 118 mg auf 6 mg in weniger als 42 Sekunden zu komprimieren. Es hat auch eine großartige Demo-App, folgen Sie einfach dem Beispiel.

Nachdem Sie die komprimierte Datei erhalten haben, laden Sie die Datei in den Speicher hoch. In Ihrer Client-App spielen Sie die Video-URL mit einem Player wie Exo Player ab.

Giovanny Piñeros
quelle