背景
iOSで撮影した動画をFirebaseなどに保存する方法を調べても、日本語の記事が出てこなかったので、ここにまとめることにしました。
準備
初めにFirebaseの設定がすんでいることが前提です。
また、Firebase Storageを用いるのでこちらもルールも含めて設定しておいてください。
もちろんpodもインストールしておくこと。
動作環境
swift4.2.1
アプリ内で撮影された動画の基本
アプリ内で撮影された動画は、基本的にアプリ内に保存されることになる。保存された動画のパスは、例えば、NSURLという値で指定される。
以下のコードは、動画の撮影を行うときのものである。fileoutputにNSURL型のfileURLを指定して録画を開始している。
func Record() {
if !isRecording {
// 録画開始
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentsDirectory = paths[0] as String
let filePath : String? = "\(documentsDirectory)/temp.mp4"
let fileURL : NSURL = NSURL(fileURLWithPath: filePath!)
fileOutput.startRecording(to: fileURL as URL, recordingDelegate: self)
isRecording = true
} else {
// 録画終了
fileOutput.stopRecording()
}
}
このようにSwiftでは、アプリ内にNSURLで指定される形で撮影された動画が保存されることになる。
ファイルパスを指定してUpload
この構造を知っていれば後は、パスを指定してFirebaseにアップロードすればいい。
今回は、動画をmp4でアプリ内に保存されていることからfirebase Databaseではなく、Firebase Storageに保存することになる。
保存は、以下のように行えば良い。
まず、次をimportする。
import Firebase
import FirebaseStorage
そのあとに、撮影の終了のタイミングで
func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {
let storageReference = Storage.storage().reference().child("\(UseID!).mp4")
// Start the video storage process
storageReference.putFile(from: outputFileURL as URL, metadata: nil, completion: { (metadata, error) in
if error == nil {
print("Successful video upload")
} else {
print()
}
}
)
}
というように処理すればアップロードが可能です。