Потоковое видео 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;
}
});
Это не лучший способ сделать что-то, но он работает для меня до сих пор, пока я не найду хорошую службу потокового видео.