Edited at

iOSで撮影した動画をFirebaseに保存する方法


背景

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()
}
}
)
}

というように処理すればアップロードが可能です。