【Swift入門】URLから動画をダウンロードしてフォトライブラリに保存する方法
はじめに
Swiftを使ってURLから動画をダウンロードし、端末のフォトライブラリに保存するには、いくつかの手順を踏む必要があります。この記事では、必要な権限設定から実際の実装コードまで、順を追ってわかりやすく解説していきます。
実装前に確認しておくべきポイント
動画のダウンロード機能を実装する際は、以下の3点に注意しましょう。
App Transport Security(ATS)の許可:動画のダウンロードにはインターネット通信が必要です。HTTPで配信されている動画にも対応できるよう、Info.plistでATSの例外設定を行っておきましょう。
フォトライブラリへのアクセス権限:ダウンロードした動画を「写真」アプリに保存するため、フォトライブラリの使用許可が必須です。
バックグラウンドでのダウンロード:動画データはサイズが大きいため、フォアグラウンドでダウンロードするとUIが固まり、アプリを操作できなくなる恐れがあります。必ずバックグラウンドスレッドで処理を実行しましょう。
手順1:Info.plistへの設定を追加する
まず、以下のコードをInfo.plistファイルに追加してください。これにより、フォトライブラリの使用許可と、任意の通信を許可するATSの設定が有効になります。
<key>NSPhotoLibraryUsageDescription</key>
<string>saves</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
手順2:viewDidLoadからダウンロード処理を呼び出す
次に、後ほど実装するダウンロード用の関数を呼び出すため、viewDidLoadメソッドに処理を追加します。viewDidLoadは以下のようになります。
override func viewDidLoad() {
super.viewDidLoad()
self.downloadVideo()
}
手順3:動画ダウンロード関数を実装する
以下は、指定したURLから動画をダウンロードし、ドキュメントディレクトリに一時保存した後、フォトライブラリへ登録する関数の完全なコードです。
func downloadVideo() {
let sampleURL = "https://commondatastorage.googleapis.com/gtv-videosbucket/sample/ElephantsDream.mp4"
DispatchQueue.global(qos: .background).async {
if let url = URL(string: sampleURL), let urlData = NSData(contentsOf: url) {
let galleryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let filePath = "\(galleryPath)/nameX.mp4"
DispatchQueue.main.async {
urlData.write(toFile: filePath, atomically: true)
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL:
URL(fileURLWithPath: filePath))
}) { success, error in
if success {
print("Succesfully Saved")
} else {
print(error?.localizedDescription ?? "")
}
}
}
}
}
}
このコードの流れを簡単に整理すると、次の通りです。
- DispatchQueue.global(qos: .background)により、ダウンロード処理をバックグラウンドスレッドで実行し、UIのフリーズを防ぎます。
- NSData(contentsOf:)でURLから動画データを取得します。
- 取得したデータをドキュメントディレクトリ内の「nameX.mp4」として書き出します。
- PHPhotoLibrary.shared().performChangesを使い、保存したファイルをフォトライブラリに登録します。
なお、PHPhotoLibraryやPHAssetChangeRequestを利用するため、対象ファイルの先頭にimport Photosを追加することを忘れないでください。
実行結果の確認方法
このサンプルでは画面上に他のUI要素を配置していないため、アプリの画面には特別な変化は現れません。処理の結果はコンソールのprint文の出力で確認でき、「Succesfully Saved」と表示されていれば保存成功です。実際に動画が保存されたかどうかは、iOSの「写真」アプリを開いて確認してみましょう。
まとめ
SwiftでURLから動画をダウンロードしてフォトライブラリに保存するには、①Info.plistでの権限設定、②バックグラウンドでのダウンロード処理、③PHPhotoLibraryによる保存登録、という3つのステップが重要になります。特に権限周りの設定漏れはクラッシュの原因になるため、実装前に必ず確認しておきましょう。
-
4K Stogramを使ってInstagramの写真・ストーリーをダウンロードする方法
ソーシャルメディア市場ではFacebookが大きなシェアを占めていますが、Instagramはその使いやすさと豊富な機能により、着実に人気とフォロワー数を伸ばし続けています。しかし、Instagramには一つ大きな弱点があります。それは、ユーザーが投稿した写真・動画・ストーリーを直接ダウンロードできないという点です。そのため、多くのユーザーはサードパーティ製ツールに頼るしかありません。中でも特に優れたツールの一つが「4K Stogram」です。 4K Stogramは、Windows・macOS・Linuxのパソコンにインストールして使えるアプリケーションで、フォロワーの公開アカウントだけでな
-
AndroidでTwitter・Instagramの動画をダウンロードする方法を徹底解説
SNSは、友人や家族とのつながりを保つための最も便利な手段のひとつです。Twitter(現X)やInstagramのタイムラインには、毎日膨大な数の写真や動画が投稿されています。しかし、残念ながらどちらのプラットフォームにも、動画を直接ダウンロードする機能は備わっていません。気になる動画を後でもう一度視聴したい場合は、ブックマークや「いいね」で保存できますが、端末本体に動画データを残したいときは、専用のダウンローダーアプリが必要になります。 この記事では、AndroidスマートフォンでTwitterとInstagramの動画をダウンロードする具体的な手順を、画像付きでわかりやすく解説します。