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 |
댓글