본문 바로가기
Swift

동영상 재생 MPMoviewPlayerController

by 루에 2015. 10. 29.
반응형

MediaPlayerFrameWork를 이용한 동영상 재생 방법


MPMoviewPlayerController 와 MPMoviePlayerViewController 두 종류가 있다. 후자는 신을 전환해서 사용하는 방법이다.

전자를 살펴보자.


제공되는 기본적인 재생 관련 함수

prepareToPlay()

play()

pause()

stop()

currentPlaybackTime: NSTimeInterval { get set }    // 현재 재생 시간(초 단위)


비동기로 동작한다.


동영상 속성

var moviewMediaTypes : MPMovieMediaTypeMask { get }    // 미디어 타입(비디오, 오디오)

var movieSourceType : MpMovieSourceType    // 미디어 소스(파일, 스트리밍)


스트리밍의 경우 로딩에 시간이 소요되므로 재생 가능 시간이 별도로 존재

var duration : NSTimeInterval { get }

var playableDuration : NSTimeInterval { get }


원본 동영상 크기

var naturalSize : CGSize { get }


미디어 속성은 재생 시작 일정 시간 후 알 수 있다. 초기에는 Unknown 상수값이나 0으로 나타난다.


동영상 알림

재생 종교시 DidFinishNotification 발생, 재생 상태 변경시 StateDidChangeNotification 발생

MPMoviewPlayerPlaybackDidFinishNotification

MPMoviePlayerPlaybackStateDidChangeNotification


속성값을 얻을 수 있게 되면 알림

MPMovieDurationAvailableNotification


위 알림 상수들은 MPMoviePlayerController에 정의 되어 있으며 Notification으로 끝나는 이름으로 검색하면 쉽게 찾을 수 있다.


알림 감시 노티 등록 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
 
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "handleNotification:",
 name: MPMovieDurationAvailableNotification, object: nil)
    }
    
    func handleNotification(noti: NSNotification) {
        let player = noti.object as! MPMoviePlayerController
        print("duration : \(player.duration)")
    }
cs


동영상 재생 예제

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
import UIKit
import MediaPlayer
 
class ViewController: UIViewController {
 
    @IBOutlet var containerView: UIView!
    var player : MPMoviePlayerController!
    var mPlayer : AVPlayerViewController!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
 
    @IBAction func play(sender: AnyObject) {
        for v in containerView.subviews {
            v.removeFromSuperview()
        }
        
        player = nil
        
        player = initPlayer()
        player.view.frame = containerView.frame
        containerView.addSubview(player.view)
        player.setFullscreen(true, animated: true)
        
        player.play()
    }
    @IBAction func pause(sender: AnyObject) {
        player.pause()
    }
    @IBAction func stop(sender: AnyObject) {
        player.stop()
    }
    
    func initPlayer() -> MPMoviePlayerController {
        let url = NSBundle.mainBundle().URLForResource("talkv_high", withExtension: "mp4")
        return MPMoviePlayerController(contentURL: url)
    }
}
 
 
cs

반응형

댓글