Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
AVPlayer周りの設計tips
Search
toshi0383
October 09, 2018
Programming
950
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
380
Sheets API使ってみた
toshi0383
2
440
visionOSについてGlobeeが取り組んでいること
toshi0383
0
630
agile20150512-150512055145-lva1-app6892.pdf
toshi0383
0
270
たのしいAirPlay
toshi0383
1
820
Profiling using Signpost
toshi0383
2
1.1k
cmdshelf::from("Swift")
toshi0383
3
970
AbemaTV iOSのダウンロード再生機能
toshi0383
4
1k
Other Decks in Programming
See All in Programming
はじめてのPLATEAU
nokonoko1203
1
530
Inertia Rails: The One-Person Framework with React & Friends
skryukov
0
380
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
140
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
240
GraphQL の onError と Nullability のこれから
quramy
0
210
AIが生成したコードは読むべきか?抽象化設計とコードの品質保証 / abstraction-design-and-quality
minodriven
16
8.6k
作れるエンジニアから、価値を届けるエンジニアへ
ryunakayama
1
210
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
220
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
14
11k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
410
Zero-Tap Sign-In対応、結局何をすればいいの?
mitohato14
0
1.5k
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
330
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
350
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
330
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Color Theory Basics | Prateek | Gurzu
gurzu
1
510
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
370
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
760
WCS-LA-2024
lcolladotor
0
970
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
320
Docker and Python
trallard
47
4.3k
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