Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Swift

Войти
Регистрация
Восстановить пароль
 
Pobeda
1 / 1 / 1
Регистрация: 08.10.2015
Сообщений: 34
#1

AVFoundation - Swift

25.07.2016, 17:47. Просмотров 599. Ответов 1
Метки нет (Все метки)

Привет всем, ребята нужна помощь,
задача выбрать 2 видео и поменять их звуки
открыть камеру, записать и поиграть видео смог сделать, а вот как поменять звуки нет!

заранее спасибо за помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pobeda
1 / 1 / 1
Регистрация: 08.10.2015
Сообщений: 34
02.08.2016, 16:22  [ТС] #2
если кому интересно вот код, который меняет звуки 2 видео, и если видео длиннее аудио, то длину аудио делает равным видео

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
@IBAction func selectAndEditVideo(sender: AnyObject) {
        
        
        var dataPath = ""
        //video 1
        let fUrl = NSURL(fileURLWithPath: video1)
        let urlAsset1 = AVURLAsset(URL: fUrl, options: nil)
        let cmTime1 = CMTimeRange(start: kCMTimeZero, duration: urlAsset1.duration)
        
        //video 2
        let fUrl2 = NSURL(fileURLWithPath: video2)
        let urlAsset2 = AVURLAsset(URL: fUrl2, options: nil)
        let cmTime2 = CMTimeRange(start: kCMTimeZero, duration: urlAsset2.duration)
        //composition 1
        let compositionTrackVideo = composition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid)
         let compositionTrackAudio = composition.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID: kCMPersistentTrackID_Invalid)
        //Add tracks in composition 1
        do {
            try compositionTrackVideo.insertTimeRange(cmTime1, ofTrack: urlAsset1.tracks[0], atTime: kCMTimeZero)
            
        } catch {print("chexav")}
        
        
        if cmTime1.containsTimeRange(cmTime2) {
            do {
                try compositionTrackAudio.insertTimeRange(cmTime1, ofTrack: urlAsset2.tracks[1], atTime: kCMTimeZero)
                compositionTrackAudio.scaleTimeRange(cmTime2, toDuration: CMTimeMake(urlAsset2.duration.value*(urlAsset1.duration.value/urlAsset2.duration.value), urlAsset2.duration.timescale))
            } catch {print("chexav")}
        } else if cmTime2.containsTimeRange(cmTime1) {
            do {
                try compositionTrackAudio.insertTimeRange(cmTime1, ofTrack: urlAsset2.tracks[1], atTime: kCMTimeZero)
            } catch {print("chexav")}
        }
        // composition 2
        let compositionTrackVideo2 = composition2.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid)
        
        let compositionTrackAudio2 = composition2.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID: kCMPersistentTrackID_Invalid)
        
        // Add tracks in composition2
        do {
            try compositionTrackVideo2.insertTimeRange(cmTime2, ofTrack: urlAsset2.tracks[0], atTime: kCMTimeZero)
        } catch{}
        
        
        if cmTime2.containsTimeRange(cmTime1) {
            do {
                try compositionTrackAudio2.insertTimeRange(cmTime2, ofTrack: urlAsset1.tracks[1], atTime: kCMTimeZero)
                compositionTrackAudio2.scaleTimeRange(cmTime2, toDuration: CMTimeMake(urlAsset1.duration.value*(urlAsset2.duration.value/urlAsset1.duration.value), urlAsset1.duration.timescale))
            } catch{}
        } else if cmTime1.containsTimeRange(cmTime2) {
            do {
                try compositionTrackAudio2.insertTimeRange(cmTime2, ofTrack: urlAsset1.tracks[1], atTime: kCMTimeZero)
            } catch{}
        }
        
        // path to export file
        dataPath = NSTemporaryDirectory().stringByAppendingString("video"+String(arc4random_uniform(100000))+".mp4")
        
        //export session
        
        ExportVideo(composition, path: dataPath)
        video1 = dataPath
        dataPath = NSTemporaryDirectory().stringByAppendingString("video"+String(arc4random_uniform(100000))+".mp4")
        ExportVideo(composition2, path: dataPath)
        video2 = dataPath
      }
    // play video
    func playCurrentVideo(path:NSURL) {
        let asset = AVURLAsset(URL: path, options: nil)
        let playerItem = AVPlayerItem(asset: asset)
        
        let player = AVPlayer(playerItem: playerItem)
        let playerViewController = AVPlayerViewController()
        playerViewController.player = player
        
        self.presentViewController(playerViewController, animated: true) {
            playerViewController.player!.play()
        }
 
    }
    
    // export video
    func ExportVideo(composition:AVMutableComposition, path:String) -> NSURL {
        let exportSession = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetLowQuality)
        exportSession?.outputFileType = AVFileTypeQuickTimeMovie
        let outputUrl = NSURL(fileURLWithPath: path)
        exportSession?.outputURL = outputUrl
        exportSession?.exportAsynchronouslyWithCompletionHandler({ 
            
        })
        return (exportSession?.outputURL)!
    }
0
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru