【问题标题】:Stream videos using Firebase in Android在 Android 中使用 Firebase 流式传输视频
【发布时间】:2019-09-10 07:00:54
【问题描述】:

我已经找到了一个类似的问题here,但这是大约 2 年前提出的。目前,我正在开发一款适用于 Android 的视频流媒体应用,我正在考虑使用 Firebase 来托管视频是否是一个可行的选择。

我尝试使用存储在 Firebase 存储中的视频的 URL 在我的应用中播放视频,效果很好。

但我在网上搜索并发现每个人都建议不要使用 Firebase。是否有任何特殊原因不应该将 Firebase 用于此目的?

P.S.就我而言,所有需要流式传输的视频都是高清的,并且持续时间更长。

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 是的,您可以使用下载 url 流式传输视频。只需复制它并将其传递到 videoview 即可。我使用 exo 播放器播放大部分文件格式。是的,定价很高,但您可以通过应用内购买负担得起。在这里观看完整的解释。 youtu.be/EaJHJK6Vzqg

标签: android firebase firebase-storage


【解决方案1】:

Firebase 存储不会限制您可以上传到其中的文件类型。因此,您可以毫无问题地上传视频文件。 但是,如果您希望能够为不同类型的客户端以不同格式流式传输视频,您可能会感到失望。您应该主要将 Firebase 存储视为通用文件存储解决方案,而不是视频流解决方案。

此外,考虑到 firebase 使用成本,随着用户群的增长,您可能需要支付很多钱。

read here and here

【讨论】:

  • 您提供的答案的链接几乎是 2 年前我在问题中提到的。我想知道 Firebase 在过去 2 年中是否增加或改进了对视频流的支持?
【解决方案2】:

为了流式传输视频,最好使用一些流式传输协议,例如 HLS 的 DASH,因为它会根据网络速度等自适应地加载下一个视频块。

如果您也有支持 iOS 的想法,请选择 Android 和 iOS 均支持的HLS

正如我在此答案中所写,有一种方法可以在 Firebase Cloud Storage 上托管 HLS 视频以进行流式传输: Firebase Storage Video Streaming

【讨论】:

    【解决方案3】:

    不,Firebase 开发人员尚未发布与视频流支持相关的任何内容。我实际上和你一样使用存储。首先我下载它并保存在本地文件中:

    private fun downLoadVideosLocal(firebaseStorageUrl: String): String {
        // Getting the data from storage from uri
        val videoRef = storage.getReferenceFromURL(firebaseStorageUrl)
    
        // Download video to local file
        try {
            val localFile = File.createTempFile("videos", "mp4")
    
            videoRef.getFile(localFile).addOnSuccessListener {
                // Local temp file has been created
                Log.v("VideoDownloaded", "The video was downloaded")
            }.addOnFailureListener {
                // Handle any error
                Log.v("VideoDownloaded", "File Failure")
            }
            return localFile.absolutePath
        } catch (e: IOException) {
            e.printStackTrace()
            return ""
        }
    }
    

    然后我在 videoView 上播放它,将 absolutePath 解析为 Uri,这样我就可以使用 setVideoUri() 方法,就是这样。

    接下来我要做的是在 Linux 上创建视频流服务器,以避免下载视频的许多成本。因为我可能会下载很多视频给 200 个或更多的客户。我希望 Firebase 或 Google 开发人员在未来实现视频流服务器。您也可以使用 Youtube Api,但如果您不希望您的视频被其他人看到怎么办?呵呵

    【讨论】:

      【解决方案4】:

      是的,从 firebase 流式传输视频既简单又可行。

      根据您的用例,可以使用 HLS 或 DASH 等协议。但这不是必需的。

      查看我对另一个问题here的回答。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-15
        • 2014-09-21
        • 2012-02-19
        • 1970-01-01
        相关资源
        最近更新 更多