28

Pracuję nad aplikacją z funkcją przesyłania strumieniowego wideo. Używam bazy danych Firebase i magazynu Firebase. Próbuję znaleźć jakąś dokumentację dotyczącą sposobu przechowywania plików wideo przez zaporę Firebase, ale tak naprawdę nie mogę jej znaleźć.Firebase Storage Video Streaming

W dokumentach jest mowa o tym, że pamięć masowa Firebase działa z innymi usługami aplikacji Google, aby umożliwić przesyłanie CDN i wideo, ale wszystkie wyszukiwania wydają się prowadzić do ślepego zaułku. Jakakolwiek rada?

+1

Z tego co wiem, nie ma prefabrykowanych integracji między Firebase Storage i CDN lub usługami przesyłania strumieniowego wideo. Czy możesz podać link do dokumentacji, w której to widziałeś? –

+0

"Magazyn Firebase przechowuje twoje pliki w zasobniku Google Cloud Storage udostępnionym w domyślnej aplikacji Google App Engine, dzięki czemu są one dostępne za pośrednictwem interfejsów API Firebase i Google Cloud API, co pozwala na elastyczność przesyłania i pobierania plików z klientów mobilnych za pośrednictwem Firebase i przetwarzanie po stronie serwera, takie jak filtrowanie obrazu lub transkodowanie wideo za pomocą Google Cloud Platform. " https://firebase.google.com/docs/storage/#key_functions – gcas

+0

Staram się też szybko przechowywać w Firebase, ale nie udało się ustawić domeny. Wydaje mi się, że hostowanie Firebase może działać szybko, ponieważ hosting Firebase ma swój własny CDN. Myślę, że nie jest to konieczne w przypadku hostingu Firebase. – tenki

Odpowiedz

16

Myślę, że istnieje kilka rodzajów video streaming, które mogą zmienić naszą odpowiedź tutaj:

  • żywo strumieniowej (abonenci oglądają jako zdarzenie)
  • stylu Youtube (zamieścić wideo i końcowych użytkowników obejrzyj je dla wygody)

Po zbudowaniu na żywo aplikacji w stylu Periscope za pomocą Firebase Storage i bazy danych Firebase Realtime, zdecydowanie polecam jej - przesłaliśmy trzy części i zsynchronizowaliśmy je przez Realtime Datab ase. Chociaż zadziałało (zadziwiająco dobrze), nastąpiło opóźnienie o około 5 sekund w porównaniu z bardzo dobrym internetem, a także nie było najskuteczniejszym rozwiązaniem (w końcu przesyłasz i przechowujesz ten film, a także nie było żadnego transkodowania) . Zalecam użycie stylu WebRTC, stworzonego do transportu wideo, i używania Realtime Database do sygnalizowania wzdłuż strumienia.

Z drugiej strony zdecydowanie można budować mobilne YT w funkcjach Firebase. Ta sztuczka polega na transkodowaniu wideo (używając czegoś takiego jak Zencoder lub Bitmovin, więcej tutaj: https://cloud.google.com/solutions/media/), aby podzielić przesłane wideo na mniejsze fragmenty o różnych rozdzielczościach (i różnych formatach, na przykład iOS wymaga HLS do streamingu). Klient może przechowywać informacje o porcji w bazie danych Realtime (nazwa kawałka, dostępne rozdzielczości, liczba porcji) i może pobrać wspomniane porcje z pamięci masowej w miarę postępu wideo.

+0

Dzięki za wskazówki i za podzielenie się wrażeniami. Wymaganie mojej aplikacji jest bardziej podobne do opcji 2. Użytkownicy będą mogli przesyłać krótkie klipy wideo, które inni użytkownicy będą mogli później przesyłać strumieniowo. Rzeczywiście przeczytałem artykuł, który mi przysłaliście poprzedniego dnia, ale liczył na to, że może nastąpić ściślejsza integracja między tymi dwiema usługami, która nie jest tam udokumentowana. Podobnie jak w przypadku przechowywania danych w Firebase i cen GCP dla tych zadań, może lepiej będzie zaglądać do innej usługi hostingu wideo. W tej chwili szukam Sprout Video i Vimeo Pro. – gcas

+0

Sprawdziłbym również http://ziggeo.com/, są one dość łatwe w użyciu i mogą zawierać wszystkie elementy potrzebne do odniesienia sukcesu w tej przestrzeni. –

+2

@ gcas, czego dokładnie używasz? Jestem też w tej samej łodzi z wykorzystaniem firebase. czy korzystałeś z magazynu firebase i transkodowania za pomocą innej usługi (np. zencoder). – jasan

11

Jeśli chcesz sparować wideo z Firebase Storage, jest to najlepszy sposób, jaki znalazłem. To zależy od wielkości pliku wideo. Żądam tylko plików o rozmiarze 10-30 MB, więc to rozwiązanie działa dobrze dla mnie. Wystarczy traktować Firebase Url jako zwykły URL:

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

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

Jeśli chcesz pętla wideo:

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

A jeśli chcesz pokazać pasek postępu przed rozpoczęciem filmu to zrobić:

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; 
    } 
}); 

To nie jest najlepszy sposób robienia rzeczy, ale na razie działa dla mnie, dopóki nie znajdę dobrej usługi przesyłania strumieniowego wideo.

+1

Awansuj na przykładowy kod. – theBushman