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
930
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
790
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
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.6k
Vite+ Unified Toolchain for the Web
naokihaba
0
420
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
210
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
630
AI時代のUIはどこへ行く?その2!
yusukebe
22
7.7k
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
6
960
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
180
Oxcを導入して開発体験が向上した話
yug1224
4
370
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
140
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
340
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
260
Featured
See All Featured
KATA
mclloyd
PRO
35
15k
Building Applications with DynamoDB
mza
96
7.1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
550
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
210
AI: The stuff that nobody shows you
jnunemaker
PRO
8
760
Leo the Paperboy
mayatellez
7
1.9k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
330
My Coaching Mixtape
mlcsv
0
170
The World Runs on Bad Software
bkeepers
PRO
72
12k
Code Reviewing Like a Champion
maltzj
528
40k
Mind Mapping
helmedeiros
PRO
1
280
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