Firebase存储视频流


73

我正在开发一个具有视频流功能的应用程序。我正在使用Firebase数据库和Firebase存储。我正在尝试查找有关Firebase存储如何处理视频文件的文档,但实际上找不到太多。

在文档中提到Firebase存储可以与其他Google应用服务一起使用,以允许CDN和视频流式传输,但是所有搜索似乎都陷入了死胡同。有什么建议吗?


3
据我所知,Firebase Storage与CDN或视频流服务之间没有预制集成。您可以提供您看到此文档的链接吗?
Frank van Puffelen

1
“ Firebase Storage将您的文件存储在与默认Google App Engine应用程序共享的Google Cloud Storage存储桶中,从而可以通过Firebase和Google Cloud API进行访问。这使您可以灵活地通过Firebase从移动客户端上载和下载文件,并通过服务器使用Google Cloud Platform进行图像过滤或视频转码等方面的处理。” firebase.google.com/docs/storage/#key_functions
GCAS

1
我也在尝试快速使用Firebase存储,但是在设置域时失败。我认为Firebase托管可以快速运行,因为Firebase托管具有自己的CDN,所以我认为Firebase托管是不必要的。
Mike Yang

1
@gcas您找到解决方案了吗?
Grantespo

Answers:


58

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

  • 实时流式传输(事件发生时,订户正在观看)
  • YouTube风格(发布视频并让最终用户在方便时观看)

使用Firebase Storage和Firebase Realtime Database构建了实时流式Periscope风格的应用程序后,我强烈建议不要使用它-我们上传了三秒钟的数据块,并通过Realtime Database进行了同步。虽然效果很好(令人惊讶的是),但良好的互联网存在约5秒钟的延迟,它也不是最有效的解决方案(毕竟,您正在上传和存储该视频,而且没有任何转码功能) 。我建议使用一些为视频传输而构建的WebRTC样式,并使用Realtime Database沿流发送信号。

另一方面,绝对有可能在Firebase功能上构建移动YT。这里的技巧将是对视频进行转码(使用Zencoder或Bitmovin之类的东西,更多信息在这里:https ://cloud.google.com/solutions/media/ ),将您上传的视频切成不同分辨率的小块(和不同的格式,例如,iOS需要使用HLS进行流式传输)。您的客户端可以将块信息存储在实时数据库中(块名称,可用的分辨率,块数),并且可以在视频进行时从存储中下载所述块。


1
感谢您的提示,并分享您的经验。我的应用程序的要求与选项2更相似。用户将可以上传短视频剪辑,其他用户以后可以流式传输。实际上,我确实读过了几天前您发给我的文章,但希望在此处未记录的两个服务之间可能有更紧密的集成。听起来像Firebase存储和针对这些任务的GCP定价,我不妨考虑其他视频托管服务。我目前正在研究Sprout Video和Vimeo Pro。
gcas

1
我也会查看ziggeo.com,它们非常易于使用,并且可能拥有在该领域取得成功所需的一切。
Mike McDonald

5
@gcas您到底使用了什么?我也在同一座船上使用Firebase。您是否使用Firebase存储和其他服务(例如zencoder)进行转码?
jasan

1
我也对您所说的Vimeo Pro感到困惑,Vimeo水印不会通过iframe显示吗?
jasan

4
@MikeMcDonald,您能否详细说明如何进行YT样式流传输,尤其是如何逐块进行流传输,而不是从Firebase Storage下载整个视频。另外,WebRTC是否可以用于一对多视频流,即广播?
Afeez Aziz

24

如果您想从Firebase Storage中提取视频,这是我发现的最佳方法。这将取决于您的视频文件的大小。我只需要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();

如果要循环播放视频:

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

这不是最好的处理方式,但是它对我来说一直有效,直到我能找到良好的视频流服务为止。


4
这不使用任何分块吗?看起来它只是将视频源指向文件URL。是对的吗?这样行得通吗
-SeanMC

7

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

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

在所有其他情况下,您只需将视频编码为mp4,然后将其上传到Firebase。然后,您的客户可以毫无问题地传输mp4。只要确保您的moov原子位于mp4文件的开头即可。即使未完全加载视频,也可以立即开始播放视频。用户还可以向前或向后跳过,这要归功于Firebase存储支持的可变位请求。

要对其进行测试,只需将视频上传到Firebase存储并在浏览器中将其打开。


我只是想知道视频大小是否为1.4GB。如果一个人观看,那么也在下载中,同时也计为1.4GB ??? (定价)
marsho

公平的一点,但是如果没有HLS(或DASH),您将仍然浪费消费者的带宽,因为您将不会使用自适应分辨率流。并非每个设备都希望或需要1080p流。
戴维

1
@戴维是的,是的。同样,您的成本也可以从HLS或DASH中受益,因为您也必须为此带宽付费。
Skyy2010 '20

6

您可以在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

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

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


1
嗨,您知道当我们有200MB的HLS视频(10MB的块)并且用户仅观看/缓冲了一半的视频时,在Firebase定价方面会发生什么?他们会向我们收取总MB费用的一半吗?其次,谈到Flutter,iOS和Android都需要HLS对吗?不需要DASH
aytunch

我们如何使用这些视频文件和m3u8文件块管理安全性?假设我不希望某些用户访问某些视频文件。可能吗?最后,我们是否必须使用Firebase Cloud Storage?我们可以改用Firebase Storage吗?
aytunch

关于定价,您可能是正确的,您只需要为从Firebase中获取的内容付费,而使用HLS时,您只需获取接下来的几块。
syonip

正如我在博客文章中提到的那样,两个平台都对HLS进行了本机支持,但DASH仅在Android中受本机支持
syonip

为了安全起见(在博客文章中也提到过),您必须在播放m3u8文件的文件名中添加firebase令牌。我没有测试过,但是应该可以。
syonip

0

如果要创建类似YouTube的应用,则可以先压缩视频,我建议使用此 来管理视频压缩,我建议使用此链接中的视频。我设法在42秒内将118 mg的视频压缩为6 mg。它也有一个很棒的演示应用程序,只需按照示例操作即可。

获取压缩文件后,将文件上传到存储,在客户端应用中,您将使用Exo Player等播放器播放视频URL。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.