在Android中使用Firebase播放视频

时间:2019-04-20 07:52:49

标签: android firebase firebase-storage

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

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

但是我在网上搜索后发现,每个人都建议不要使用Firebase。为什么不应该将Firebase用于此目的?

PS 。就我而言,所有需要流式传输的视频均为高清格式,并且持续时间更长。

任何帮助将不胜感激。预先感谢。

4 个答案:

答案 0 :(得分:2)

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

此外,考虑到使用Firebase的成本,您可能会随着用户群的增长而付出很多钱。

read here and here

答案 1 :(得分:2)

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

如果您也有支持iOS的想法,则希望选择HLS,它在Android和iOS上受支持。

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

答案 2 :(得分:0)

不,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 ""
    }
}

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

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

答案 3 :(得分:0)

是的,从Firebase进行视频流传输很容易并且可能。

取决于您的用例协议,可以使用HLS或DASH。但这不是必需的。

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