Firebase存储视频流

gca*_*cas 56 video-streaming firebase google-cloud-platform firebase-storage

我正在开发一款具有视频流功能的应用.我正在使用firebase数据库和firebase存储.我正在尝试找一些关于firebase存储如何处理视频文件的文档,但实际上找不到多少.

在文档中提到,firebase存储与其他谷歌应用服务一起使用以允许CDN和视频流,但所有搜索似乎都导致死路一条.有什么建议?

Mik*_*ald 37

我认为有几种类型的视频流,这可能会改变我们的答案:

  • 直播(订阅者正在观看事件发生)
  • Youtube风格(发布视频和最终用户方便观看)

在使用Firebase存储和Firebase实时数据库构建了实时流式Periscope风格应用程序后,我非常强烈建议不要使用它 - 我们上传了三个第二个块并通过实时数据库同步它们.虽然它有效(令人惊讶的好),但在非常好的互联网上有大约5秒的延迟,它也不是最有效的解决方案(毕竟,你上传和存储该视频,加上没有任何转码) .我建议使用一些WebRTC样式,专为视频传输而构建,并使用实时数据库在流的旁边发送信号.

另一方面,在Firebase功能上构建移动YT绝对是可能的.这里的诀窍是对视频进行转码(使用类似Zencoder或Bitmovin的内容,更多信息请访问https://cloud.google.com/solutions/media/)将您上传的视频整理成不同分辨率的小块(以及例如,iOS需要HLS进行流式传输.您的客户端可以将块信息存储在实时数据库中(块名称,可用分辨率,块数),并可以随着视频的进展从存储中下载所述块.

  • @gcas你到底用的是什么?我也在使用firebase的同一条船.你是否使用firebase存储和使用其他服务(即zencoder)进行转码. (4认同)
  • 感谢您的提示和分享您的经验。我的应用程序的要求更类似于选项 2。用户将能够上传其他用户稍后可以流式传输的短视频剪辑。实际上,我确实阅读了您前几天发给我的文章,但希望这两个服务之间可能存在更紧密的集成,但未在此处记录。听起来像这些任务的 Firebase 存储和 GCP 定价,我最好寻找另一种视频托管服务。我目前正在研究 Sprout Video 和 Vimeo Pro。 (2认同)
  • 我也会查看http://ziggeo.com/,它们非常易于使用,并且可能拥有您在该领域取得成功所需的所有东西。 (2认同)
  • @MikeMcDonald,您能否详细说明如何进行YT样式流传输,尤其是如何逐块进行流传输,而不是从Firebase Storage下载整个视频。另外,WebRTC是否可以用于一对多视频流,即广播? (2认同)

gra*_*spo 22

如果您想从Firebase存储中传输视频,这是我找到的最佳方式.这取决于视频文件的大小.我只要求10-30mb文件,所以这个解决方案对我有用.只需将Firebase网址视为常规网址即可:

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

videoViewLandscape.setVideoURI(uri);
progressBarLandScape.setVisibility(View.VISIBLE);
videoViewLandscape.requestFocus();
videoViewLandscape.start();
Run Code Online (Sandbox Code Playgroud)

如果你想循环播放视频:

videoViewLandscape.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.setLooping(true);
    }
});
Run Code Online (Sandbox Code Playgroud)

如果您想在视频开始之前显示进度条,请执行以下操作:

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;
    }
});
Run Code Online (Sandbox Code Playgroud)

这不是最好的做事方式,但它现在适用于我,直到我找到一个好的视频流服务.

  • 这不使用任何分块吗?它几乎看起来只是将视频源指向文件 URL。那正确吗?这行得通吗 (4认同)

Sky*_*010 10

2020 年:是的,firebase 存储视频流很容易且可行。

所有其他问题都建议您使用 HLS 之类的协议。但是,这仅在您为 Apple AppStore 开发提供时长超过 10 分钟的视频的应用程序时才需要。

在所有其他情况下,您只需将视频编码为 mp4 并将其上传到 firebase。然后,您的客户可以毫无问题地流式传输 mp4。只需确保您的 moov atom 位于 mp4 文件的开头。这允许立即开始播放视频,即使它没有完全加载。由于 firebase 存储支持可变位请求,用户还可以跳过或返回。

要测试它,只需将视频上传到您的 Firebase 存储并在浏览器中打开它。

  • @戴维是的,是的。此外,您的成本可能会受益于 HLS 或 DASH,因为您也必须为该带宽付费。 (2认同)

syo*_*nip 9

您可以在 Firebase Cloud Storage 上托管 HLS 视频。它对我来说效果很好。诀窍是修改播放列表.m3u8文件以包含存储文件夹前缀,以及?alt=media播放列表中每个文件条目的后缀:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:2.760000,
<folder_name>%2F1_fileSequence_0.ts?alt=media
#EXT-X-ENDLIST
Run Code Online (Sandbox Code Playgroud)

您还没有真正使用服务器端转码,你可以有谁上传视频做的客户端,并节省可观的成本。

我在此处编写了带有源代码的完整教程:https : //itnext.io/how-to-make-a-serverless-flutter-video-sharing-app-with-firebase-storage-include-hls-and-第411e4fff68fa

  • 您好,您知道当我们有 200MB 的 HLS 视频(以 10MB 为单位)且用户仅观看/缓冲了一半视频时,Firebase 定价会发生什么情况吗?他们向我们收取总 MB 成本的一半吗?其次,说到 Flutter,HLS 就是我们 iOS 和 Android 所需要的,对吧?不需要 DASH (2认同)