質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

2166閲覧

Swift 動画と音声を一つにしたい

cherish

総合スコア47

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2015/08/13 10:48

Swiftでアプリ開発をしていて、動画と音楽を合成したいと考えています。
下記のように書いて実行すると、エラーがでてしまいます。

swift

1func mergeAudio(audioURL: NSURL, moviePathUrl: NSURL, savePathUrl: NSURL) { 2 var composition = AVMutableComposition() 3 let trackVideo:AVMutableCompositionTrack = composition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: CMPersistentTrackID()) 4 let trackAudio:AVMutableCompositionTrack = composition.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID: CMPersistentTrackID()) 5 let option = NSDictionary(object: true, forKey: "AVURLAssetPreferPreciseDurationAndTimingKey") 6 let sourceAsset = AVURLAsset(URL: moviePathUrl, options: option as [NSObject : AnyObject]) 7 let audioAsset = AVURLAsset(URL: audioURL, options: option as [NSObject : AnyObject]) 8 9 let tracks = sourceAsset.tracksWithMediaType(AVMediaTypeVideo) 10 let audios = audioAsset.tracksWithMediaType(AVMediaTypeAudio) 11 12 if tracks.count > 0 { 13 let assetTrack:AVAssetTrack = tracks[0] as! AVAssetTrack 14 let assetTrackAudio:AVAssetTrack = audios[0] as! AVAssetTrack 15 16 let audioDuration:CMTime = assetTrackAudio.timeRange.duration 17 let audioSeconds:Float64 = CMTimeGetSeconds(assetTrackAudio.timeRange.duration) 18 19 trackVideo.insertTimeRange(CMTimeRangeMake(kCMTimeZero,audioDuration), ofTrack: assetTrack, atTime: kCMTimeZero, error: nil) 20 trackAudio.insertTimeRange(CMTimeRangeMake(kCMTimeZero,audioDuration), ofTrack: assetTrackAudio, atTime: kCMTimeZero, error: nil) 21 } 22 23 var assetExport: AVAssetExportSession = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetPassthrough) 24 assetExport.outputFileType = AVFileTypeMPEG4 25 assetExport.outputURL = savePathUrl 26 self.tmpMovieURL = savePathUrl 27 assetExport.shouldOptimizeForNetworkUse = true 28 assetExport.exportAsynchronouslyWithCompletionHandler { () -> Void in 29 switch assetExport.status { 30 case AVAssetExportSessionStatus.Completed: 31 let assetsLib = ALAssetsLibrary() 32 assetsLib.writeVideoAtPathToSavedPhotosAlbum(savePathUrl, completionBlock: nil) 33 println("success") 34 case AVAssetExportSessionStatus.Failed: 35 println("failed \(assetExport.error)") 36 case AVAssetExportSessionStatus.Cancelled: 37 println("cancelled \(assetExport.error)") 38 default: 39 println("complete") 40 } 41 } 42 43}

エラーの内容は下記のようなものです。

"failed Error Domain=AVFoundationErrorDomain Code=-11838 "Operation Stopped" UserInfo=0x17da4230 {NSLocalizedDescription=Operation Stopped, NSLocalizedFailureReason=The operation is not supported for this media.}"

原因がわかる方がいましたら教えていただけますでしょうか。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Stripe

2015/08/13 11:32

ちなみに、エラーの内容は理解していますか?
cherish

2015/08/13 12:10

正しいかどうかわかりませんが、保存しようとしている形式(今回の場合MPEG4)が誤っているということだと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問