일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- UICollectionViewFlowLayout
- 영문 개인정보처리방침
- Timer
- 한국어 개인정보처리방침
- 러닝타이머
- swift
- Required Reason API
- CLLocationManagerDelegate
- CoreLocation
- MKMapViewDelegate
- weak var
- 러닝기록앱
- UIAlertAction
- WeatherManager
- weatherKit
- xcode로 날씨앱 만들기
- Protocol
- 클로저의 캡슐화
- 단일 책임원칙
- dispatchsource
- addannotation
- Xcode
- 서체관리자
- App Store Connect
- RunningTimer
- Startign Assignments
- MKMapItem
- font book
- AnyObject
- SwiftUI Boolean 값
Archives
- Today
- Total
VesselWheel
xcode에서 동영상 재생 구현하기(feat. AVKit in CodeBase) 본문
https://developer.apple.com/documentation/avkit
AudioVisual(AV)이란?
슬라이드 테이프 프레젠테이션, 영화, 텔레비전 프로그램, 회사 회의, 교회 예배 등 소리와 시각적 요소를 모두 처리하는 전자 매체를 의미
더보기
AVFoundation
AudioVisual(AV) 리소스 처리하고, 카메라를 제어하며, 오디오를 처리하고, 시스템 오디오와의 상호 작호작용을 할 수 있게 해주는 프레임워크
AVKit
플레이어의 콘텐츠를 표시하고 재생을 제어하기 위한 기본적인 사용자 인터페이스(자막, PIP 등)를 제공합니다. (상단 그림 참고)
iOS에서는 기본적으로, AVPlayerViewController 를 통해 제공하며,
재생 UI를 Custom하고 싶다면, 아래에 소개되는 Core한 개념들을 활용하여 AVKit의 역할을 대체할 수 있는, 커스텀한 사용자 인터페이스를 구현할 수 있다.
AVAsset
AVFoundation에서 AV리소스가 표현되는 객체 3가지의 Track(영상, 소리, 자막)으로 구성되어 있으며, 리소스의 URL을 통해 AVAsset을 생성할 수 있습니다.
리소스와 관련한 정적 정보 (총 재생 시간, 생성 날짜 등)을 가지고 있다.
AVKit을 활용해서 동영상 재생, 정지, 앞으로, 뒤로, 전체화면, PiP 등을 구현할 수 있다.
AVKit을 활용한 동영상 재생 구현 코드
import UIKit
import AVKit
class ViewController: UIViewController {
let url = URL(string: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")!
// AVPlayerController 생성
let playerController = AVPlayerViewController()
// AVPlayer 생성
let player: AVPlayer
let playButton: UIButton = {
let button = UIButton(type: .system)
button.setTitle("Play Video", for: .normal)
button.addTarget(self, action: #selector(playButtonTapped), for: .touchUpInside)
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()
//초기화
override init(nibName nibNameOrNil: String?, bundle nilnBundleOrNil: Bundle?) {
//AVPlayer 초기화
player = AVPlayer(url: url)
super.init(nibName: nibNameOrNil, bundle: nilnBundleOrNil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemeted")
}
//뷰 로드 시
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// UIButton playButton을 뷰에 츄가
view.backgroundColor = .white
view.addSubview(playButton)
// UIButton playButton을 가운데 정렬
NSLayoutConstraint.activate([
playButton.centerXAnchor.constraint(equalTo: view.centerXAnchor),
playButton.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])
}
// // UIButton playButton이 눌렸을 때 호출되는 함수
@objc func playButtonTapped() {
//AV player 할당
playerController.player = player
//playerController를 노출
present(playerController, animated: true){
self.player.play() // present 되면 비디오 재생
}
}
}
'Xcode Study' 카테고리의 다른 글
programmatically TabBarController 만들기 (1) | 2024.01.31 |
---|---|
programmatic UI 프로젝트 구성하기(feat. xcode) (0) | 2024.01.26 |
iOS 아키텍처 패턴 이해하기(MVC, MVVM) (0) | 2024.01.23 |
Left Constraint 와 Leading Constraint 의 차이 (0) | 2024.01.23 |
Half Modal로 기본 뷰 위에 다른 뷰 올리기(feat. UISheetPresentationController) (1) | 2024.01.22 |