28

Я работаю над приложением, которое имеет функцию потоковой передачи видео. Я использую базу данных firebase и хранилище firebase. Я пытаюсь найти документацию о том, как хранилище firebase обрабатывает видеофайлы, но не может найти многого.Firebase Storage потоковое видео

В документах упоминается, что хранилище firebase работает с другими сервисами Google Apps, чтобы обеспечить CDN и потоковое видео, но все поиски, похоже, приводят к тупиковой ситуации. Любой совет?

+1

Насколько я знаю, нет интеграции с prefab между Firebase Storage и CDN или потоковыми видеопотоками. Можете ли вы предоставить ссылку на документацию, где вы это видели? –

+0

«Хранилище Firebase хранит ваши файлы в вещевом хранилище Google Cloud Storage, совместно используемом приложением Google App Engine по умолчанию, что делает их доступными как с помощью Firebase, так и с облачных API Google. Это позволяет вам гибко загружать и загружать файлы с мобильных клиентов через Firebase и делать серверной обработки, такой как фильтрация изображений или перекодирование видео с помощью Google Cloud Platform ». https://firebase.google.com/docs/storage/#key_functions – gcas

+0

Я также пытаюсь быстро установить хранилище Firebase, но не удалось установить домен. Я думаю, что хостинг Firebase может работать быстро, так как хостинг Firebase имеет свой собственный CDN, я думаю, что это не нужно для хостинга Firebase. – tenki

ответ

16

Я думаю, что есть несколько типов потокового видео, которые могли бы изменить наш ответ здесь:

  • Прямые трансляции (абоненты наблюдают, как происходит событие)
  • Youtube стиль (опубликовать видео и конечных пользователей смотреть на их удобстве)

Построив приложение потокового стиля перископа с помощью Firebase хранения и баз данных Firebase в реальное время, я очень сильно рекомендую против него - мы загрузили три вторых ломти и синхронизироваться их через Realtime Datab аза. Несмотря на то, что он работал (на удивление хорошо), на очень хорошем интернет-ресурсе было ~ 5 секунд латентности, и это также было не самым эффективным решением (в конце концов, вы загружаете и сохраняете это видео, а также не транскодируете) , Я рекомендую использовать некоторый стиль WebRTC, созданный для видео транспорта, и используя базу данных Realtime для сигнализации вдоль стороны потока.

С другой стороны, возможно создание мобильных функций YT на Firebase. Трюк здесь будет транскодировать видео (используя что-то вроде Zencoder или Bitmovin, здесь: https://cloud.google.com/solutions/media/), чтобы вырезать загруженное видео на более мелкие куски разных разрешений (и в разных форматах, например, для iOS требуется HLS для потоковой передачи). Вы можете хранить информацию о куске в базе данных реального времени (имя фрагмента, доступные разрешения, количество фрагментов) и загружать упомянутые фрагменты из хранилища по мере продвижения видео.

+0

Спасибо за советы и обмен опытом. Требование моего приложения больше похоже на вариант 2. пользователи смогут загружать короткие видеоролики, которые позже смогут передавать другие пользователи. На самом деле я действительно прочитал статью, которую вы мне прислали на днях, но надеялся, что может возникнуть некоторая более тесная интеграция между двумя службами, которые там не зарегистрированы. Звук, как с памятью Firebase и ценой GCP для этих задач, мне может быть лучше изучить другую услугу для хостинга видео. На данный момент я смотрю в Sprout Video и Vimeo Pro. – gcas

+0

Я бы посмотрел http://ziggeo.com/, они довольно просты в использовании и могут иметь все, что вам нужно для успеха в этом пространстве. –

+2

@gcas, что вы в конечном итоге использовали? Я тоже в той же лодке, используя firebase. вы использовали хранилище и транскодирование с использованием какой-либо другой службы (например, zencoder). – jasan

11

Если вы хотите выпустить видео из хранилища Firebase, это лучший способ найти. Это будет зависеть от размера вашего видеофайла. Я только запрашиваю файлы 10-30mb, поэтому это решение работает хорошо для меня. Просто лечить Firebase Url как обычный URL:

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

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

Если вы хотите, чтобы цикл видео:

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

И если вы хотите, чтобы показать прогресс бар перед видео начинает делать это:

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

Это не лучший способ сделать что-то, но он работает для меня до сих пор, пока я не смогу найти хорошее потоковое видео.

+1

Upvote для примера кода. – theBushman