28

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 Videodateien verarbeitet, aber nicht wirklich viel finden kann.Firebase Storage Video-Streaming

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

+1

Soweit ich weiß, gibt es keine vorgefertigten Integrationen zwischen Firebase Storage und CDN oder Video-Streaming-Dienste. Können Sie einen Link zu der Dokumentation bereitstellen, in der Sie das gesehen haben? –

+0

"Firebase Storage speichert Ihre Dateien in einem Google Cloud Storage-Bucket, der mit der Google Apps Engine-Standardapplikation geteilt wird und sowohl über Firebase- als auch Google Cloud-APIs zugänglich ist. Dadurch können Sie Dateien von mobilen Clients über Firebase hochladen und herunterladen serverseitige Verarbeitung wie Bildfilterung oder Videotranscodierung mithilfe der Google Cloud Platform. " https://firebase.google.com/docs/storage/#key_functions – gcas

+0

Ich versuche auch, Firebase-Speicher mit schnell, aber nicht bei der Einstellung Domäne. Ich denke, Firebase-Hosting kann schnell arbeiten, seit Firebase-Hosting hat seine eigene CDN, ich denke, es ist unnötig mit Firebase-Hosting. – tenki

Antwort

16

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

  • Live-Streaming (Abonnenten beobachten, wie ein Ereignis eintritt)
  • Youtube Stil (Ein Video und Endanwender sehen auf ihre Bequemlichkeit)

ein Live-Streaming-Periskop-Stil App Firebase Lagerung und die Firebase Realtime-Datenbank aufgebaut haben, empfehle ich dagegen ziemlich stark - wir 3 Sekunden Stücke hochgeladen und synchronisiert sie über den Realtime Datab Ase. Während es (überraschend gut) funktionierte, gab es ~ 5 Sekunden Latenz über sehr gutes Internet, und es war auch nicht die effizienteste Lösung (schließlich hochgeladen und speicherst du dieses Video, außerdem gab es keine Transkodierung) . Ich empfehle, einen WebRTC-Stil zu verwenden, der für den Videotransport entwickelt wurde und die Realtime-Datenbank für die Signalisierung entlang des Streams verwendet.

Auf der anderen Seite ist es definitiv möglich, mobile YT auf Firebase-Funktionen zu bauen. Der Trick dabei ist, das Video zu transkodieren (mit etwas wie Zencoder oder Bitmovin, mehr hier: https://cloud.google.com/solutions/media/), um dein hochgeladenes Video in kleinere Stücke mit unterschiedlichen Auflösungen zu zerhacken (und verschiedene Formate, iOS benötigt zum Beispiel HLS für das Streaming). Ihr Client kann Chunk-Informationen in der Echtzeit-Datenbank speichern (Chunk-Name, verfügbare Auflösungen, Anzahl der Chunks) und kann diese Chunks im Verlauf des Videos aus Storage herunterladen.

+0

Danke für die Tipps und um Ihre Erfahrungen zu teilen. Die Anforderung meiner App ist der Option 2 ähnlicher. Nutzer können kurze Videoclips hochladen, die später von anderen Nutzern gestreamt werden können. Ich habe tatsächlich den Artikel gelesen, den du mir neulich geschickt hast, aber ich hatte gehofft, dass es eine engere Integration zwischen den beiden Diensten geben könnte, die dort nicht dokumentiert ist. Sound mit Firebase-Speicher und GCP-Preise für diese Aufgaben, kann ich besser in einen anderen Dienst für Video-Hosting suchen. Ich suche gerade Sprout Video und Vimeo Pro. – gcas

+0

Ich würde auch http://ziggeo.com/ überprüfen, sie sind ziemlich einfach zu bedienen und haben möglicherweise alles, was Sie brauchen, um in diesem Raum erfolgreich zu sein. –

+2

@gcas was hast du genau am Ende benutzt? Ich bin auch im selben Boot mit Firebase. Haben Sie Firebase-Speicher und Transcoding mit einem anderen Dienst verwendet (z. B. zencoder). – jasan

11

Wenn Sie ein Video von Firebase Storage dampfen möchten, ist dies der beste Weg, den ich gefunden habe. Dies hängt von der Größe Ihrer Videodatei ab. Ich frage nur 10-30mb Dateien, so dass diese Lösung gut für mich funktioniert. behandeln nur die Firebase URL als reguläres 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 Schleife das Video zu wollen:

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

Und wenn Sie einen Fortschrittsbalken zeigen, bevor das Video startet dies tun:

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 der beste Weg, Dinge zu tun, aber es funktioniert für mich, bis ich einen guten Video-Streaming-Dienst finden kann.

+1

Upvote für einige Beispielcode. – theBushman

Verwandte Themen