Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AVPlayer周りの設計tips
Search
toshi0383
October 09, 2018
Programming
920
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AVPlayer周りの設計tips
potatotips #55 の発表資料です。
toshi0383
October 09, 2018
More Decks by toshi0383
See All by toshi0383
CoreDataはじめました
toshi0383
0
190
Swiftコードバトル必勝法
toshi0383
1
350
Sheets API使ってみた
toshi0383
2
410
visionOSについてGlobeeが取り組んでいること
toshi0383
0
600
agile20150512-150512055145-lva1-app6892.pdf
toshi0383
0
260
たのしいAirPlay
toshi0383
1
780
Profiling using Signpost
toshi0383
2
1.1k
cmdshelf::from("Swift")
toshi0383
3
940
AbemaTV iOSのダウンロード再生機能
toshi0383
4
1k
Other Decks in Programming
See All in Programming
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
1k
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
800
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
330
Webフレームワークの ベンチマークについて
yusukebe
0
180
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
320
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
200
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
310
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
210
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
180
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
Oxlintのカスタムルールの現況
syumai
6
1.2k
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
210
Featured
See All Featured
Building Adaptive Systems
keathley
44
3.1k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
280
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Being A Developer After 40
akosma
91
590k
What's in a price? How to price your products and services
michaelherold
247
13k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
320
Exploring anti-patterns in Rails
aemeredith
3
430
GraphQLとの向き合い方2022年版
quramy
50
15k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
The Invisible Side of Design
smashingmag
301
52k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
220
Transcript
AVPlayerपΓͷઃܭtips potatotips #55 Oct 9, 2018 Toshihiro Suzuki © Toshihiro
Suzuki 2018 1
whoami @toshi0383 (Toshihiro Suzuki) ಡΈํ: τογʔ or... © Toshihiro Suzuki
2018 2
ʮ౦ژ࠷ͷஉʯ͞Μ © Toshihiro Suzuki 2018 3
झຯ: ѪंͰυϥΠϒ (ՈͰ) © Toshihiro Suzuki 2018 4
job AbemaTV iOS/tvOS ετΫϥ (Streaming Client Team) ಈը࠶ੜ࣭ © Toshihiro
Suzuki 2018 5
Developer Blog https://developers.cyberagent.co.jp/blog/archives/17579/ © Toshihiro Suzuki 2018 6
ࠓͷςʔϚ © Toshihiro Suzuki 2018 7
AVPlayerपΓͷίʔυΛͲ ͏ཧͨ͠Β͍͍͔ ͋͘·ͰҰྫͳͷͰɺ͝ࢀߟఔʹɻ © Toshihiro Suzuki 2018 8
ྲྀΕ —લఏͱͳΔํ —ઃܭͷશମ૾Λ၆ᛌ © Toshihiro Suzuki 2018 9
ํ —AVPlayerUIͱͯ͠ଊ͑ͳ͍ —replaceCurrentItemΘͳ͍ (লུ) © Toshihiro Suzuki 2018 10
ҰൠతʹΑ͘ݟΔίʔυ class ViewController: UIViewController { var player: AVPlayer? ... override
func viewDidLoad() { super.viewDidLoad() player?.play() } } © Toshihiro Suzuki 2018 11
Α͘ݟΔίʔυͷ —playerΛ৮Δίʔυ͕ࢄΒ͍ͬͯͯݟ௨͕͠Α͘ͳ ͍ —ଞͷView͔Β৮Γ͍ͨ߹ʹڑ͕͋Δ © Toshihiro Suzuki 2018 12
ͦͦϓϨΠϠʔ͔ͩΒͬͯView ʹറΒΕ͍ͯΔͷ͕ѱ͍ͷͰ © Toshihiro Suzuki 2018 13
AVPlayerͷॳظԽૢ࡞ϝΠϯε Ϩουඞਢͱ͍͏ݴ͍͑ ࠷ۙ͋·Γฉ͔ͳ͍͚ͲɺҎલͦ͏͍͏ৗ͕ࣝଘࡏ ͨ͠ؾ͕͢Δɻ © Toshihiro Suzuki 2018 14
໎৴Ͱ͢ ؾͷ͍ͤͳͷͰΕ·͠ΐ͏ © Toshihiro Suzuki 2018 15
ͨͩ͠ KVOͷొϝΠϯεϨουͷํ͕͍͍ͱ͍͏هड़͋Γ https://developer.apple.com/documentation/avfoundation/avplayer © Toshihiro Suzuki 2018 16
͋ͱ ͜͏͍͏͋ΔͷͰཁݕূ https://speakerdeck.com/kyoheig3/abema-devcon?slide=24 © Toshihiro Suzuki 2018 17
ͱ͍͑ɺ ϝΠϯεϨου == UI ʹറΒΕΔඞ ཁͳ͍ͣ Appleͷαϯϓϧ AssetPlaybackManager ͕playerΛཧ͍ͯ͠Δ ͬͱ্ྲྀͰͬͯ͠·͓͏ʂ
© Toshihiro Suzuki 2018 18
၆ᛌΠϥετ © Toshihiro Suzuki 2018 19
RxSwift // ViewModel let control = VideoPlayerControl() ... requestReload .startWith(())
// NOTE: initial load .subscribe(onNext: { [weak self] in guard let me = self else { return } me.manager = VideoPlayerManager(url: me.url, control: me.control) me.manager.player.asObservable() .bind(to: me.playerRelay) .disposed(by: me.manager.playerDisposeBag) }) .disposed(by: disposeBag) © Toshihiro Suzuki 2018 20
RxSwift // ViewController viewModel.playerRelay.asObservable() .observeOn(ConcurrentMainScheduler.instance) .subscribe(onNext: { [weak self] player
in self?.playerView.playerLayer.player = player }) .disposed(by: disposeBag) © Toshihiro Suzuki 2018 21
·ͱΊ —AVPlayerੜΛUI͔Βͨ͠Βগ͠εοͱͨ͠ —ManagerΫϥεʹΓग़ͤͨ͜ͱͰɺը໘Λލ͍Ͱ ૢ࡞&ੜଘ͕Մೳ => Picture-in-Pictureͱ͔ෳϓϨΠϠʔͱ͔ —VideoPlayerStream Λ͏͜ͱͰɺϓϨΠϠʔͷ ڍಈΛmockՄೳ. (testable!)
© Toshihiro Suzuki 2018 22
toshi0383/VideoPlayerManager ৭ʑ్தͰ্͕͕ͬͯ͢·͢ɻ https://github.com/toshi0383/VideoPlayerManager Open-Source! © Toshihiro Suzuki 2018 23
ͪͳΈʹ ࣮AbemaTV iOSΞϓϦ͜Ε͔Β͜ͷํͰϦϑΝ ΫλʹऔΓֻ͔Δͱ͜Ζɻ tvOSͱڞ௨Ͱ͑ΔϥΠϒϥϦʹ͍ͨ͠ɻ ·ͩ·ͩࡉ͔͍ͱ͜Ζ͜Ε͔Βߟ͑ΔͷͰɺ͝ҙݟื ूதͰ͢ɻ © Toshihiro Suzuki
2018 24
ͪͳΈʹͪͳΈʹ Ұॹʹಇؒ͘·ͩ·ͩืूதͰ͢ ҰॹʹςετۦಈͰࢹௌମݧ্ ͠·͠ΐ͏ ! © Toshihiro Suzuki 2018 25
͓ΘΓ © Toshihiro Suzuki 2018 26
ࢀߟࢿྉ —Apple AVPlayerυΩϡϝϯτ —AVPlayerϕετϓϥΫςΟε by @KyoheiG3 —ಈըΞϓϦΛͳΊΒ͔ʹಈ͔ٕ͢ज़ by @dekatotoro ©
Toshihiro Suzuki 2018 27
Toshihiro Suzuki ! Twitter/GitHub/GTSport => @toshi0383 Email:
[email protected]
© Toshihiro
Suzuki 2018 28