Потоковое видео Firebase

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

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

Ответ 1

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

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

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

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

Ответ 2

Если вы хотите выпустить видео из Firebase Storage, это лучший способ найти. Это будет зависеть от размера вашего видеофайла. Я только запрашиваю файлы 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;
    }
});

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