在 Firebase 中播放和存储视频
Posted
技术标签:
【中文标题】在 Firebase 中播放和存储视频【英文标题】:Playing and Storing Videos From/To Firebase 【发布时间】:2021-11-10 20:33:36 【问题描述】:我有一个视频聊天消息应用程序,使用 AVFoundation
和 Firebase
来录制、存储和播放 1 分钟时长的视频。
一切正常,但有一个...
-
延迟播放提取的视频
上传录制的视频延迟,这里特别长
理想情况下...
-
最好“预加载”获取的视频以在命令下立即播放,但对于
AVPlayer
似乎不可能,其中加载和播放仅在调用方法 .play()
时发生。
在实际录制过程中同时上传是否有可能?或者,Firebase Storage
是否在第一次触发上传视频的网络调用后,应用可以进入后台并仍然完成?
诚然,我在管理视频方面完全是初学者,但我还没有找到任何具体指南来说明如何消除或优化减少延迟以获得更好的用户体验(即 Instagram 播放和上传 Instagram 视频故事)。任何帮助将不胜感激..
func playVideo(with outputFileURL: URL)
DispatchQueue.main.async
self.setView(view: self.progressBar, hidden: true)
self.progressBar.progress = 0
let asset = AVAsset(url: outputFileURL)
let item = AVPlayerItem(asset: asset)
self.avPlayer.replaceCurrentItem(with: item)
let previewLayer = AVPlayerLayer(player: self.avPlayer)
previewLayer.frame = self.view.bounds
previewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
self.previewView.layer.addSublayer(previewLayer)
self.view.layoutIfNeeded()
self.avPlayer.play()
func uploadVideo(_ url: URL)
let filename = "x"
let ref = Storage.storage().reference().child("videos").child("xyz").child(filename)
let uploadTask = ref.putFile(from: url, metadata: nil, completion: (_, err) in
if let err = err
print("Failed to upload movie:", err)
return
ref.downloadURL(completion: (downloadUrl, err) in
if let err = err
print("Failed to get download url:", err)
return
guard let downloadUrl = downloadUrl else return
if let thumbnailImage = self.thumbnailImageForFileUrl(url)
self.uploadToFirebaseStorageUsingImage(thumbnailImage, completion: (imageUrl) in
print("saved video url: \(downloadUrl) and saved image url: \(imageUrl)")
)
)
)
uploadTask.observe(.progress) (snapshot) in
print("In Progress")
uploadTask.observe(.success) (snapshot) in
print("Done")
func thumbnailImageForFileUrl(_ fileUrl: URL) -> UIImage?
let asset = AVAsset(url: fileUrl)
let imageGenerator = AVAssetImageGenerator(asset: asset)
imageGenerator.appliesPreferredTrackTransform = true
do
let thumbnailCGImage = try imageGenerator.copyCGImage(at: CMTimeMake(value: 2, timescale: 60), actualTime: nil)
return UIImage(cgImage: thumbnailCGImage)
catch let err
print(err)
return nil
【问题讨论】:
第一个问题看developer.apple.com/documentation/avfoundation/avqueueplayer 【参考方案1】:作为临时解决方法,我查看了compressing the file。
上传速度快很多,但质量更差,理想情况下不应该妥协。
如果有人有更好的解决方案,我会非常感激并喜欢听到它!
【讨论】:
以上是关于在 Firebase 中播放和存储视频的主要内容,如果未能解决你的问题,请参考以下文章
使用来自 firebase 存储的 react-native-video 播放视频
Cloud Functions for Firebase:在不触及最大超时的情况下完成长流程
Uncaught FirebaseError: Firebase: No Firebase App '[DEFAULT]' has been created - 在 vue.js 中调用 Fireba