我已经找到了一个类似的问题here,但这是在大约2年前提出的。目前,我正在开发适用于Android的视频流应用程序,我在考虑使用Firebase托管视频是否可行。
我尝试使用Firebase存储中存储的视频的URL在我的应用中播放视频,并且效果很好。
但是我在网上搜索后发现,每个人都建议不要使用Firebase。为什么不应该将Firebase用于此目的?
PS 。就我而言,所有需要流式传输的视频均为高清格式,并且持续时间更长。
任何帮助将不胜感激。预先感谢。
答案 0 :(得分:2)
Firebase Storage不会限制您可以上传到其中的文件类型。因此,您可以毫无问题地上传视频文件。 但是,如果您期望能够针对不同类型的客户端以不同的格式流式传输视频,则可能会感到失望。您应该将Firebase Storage主要视为一种通用文件存储解决方案,而不是视频流解决方案。
此外,考虑到使用Firebase的成本,您可能会随着用户群的增长而付出很多钱。
答案 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)