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
Video decode on iOS
Search
noppefoxwolf
June 21, 2018
Programming
2.3k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Video decode on iOS
iOS上でビデオコンテナのデコード手法をAssetReaderとVTDecompressSessionの比較を通して学びます。
noppefoxwolf
June 21, 2018
More Decks by noppefoxwolf
See All by noppefoxwolf
柔軟性のあるUIで、多くの環境でアプリを活躍させる/iOSDC26
noppefoxwolf
0
1.9k
High performance GIF playback/iOSDC25
noppefoxwolf
1
730
Spice up your notifications/try!Swift25
noppefoxwolf
3
870
iOSの隠されたAPIを解明し、開発効率を向上させる方法/iOSDC24
noppefoxwolf
2
1.6k
今から理解するApp Intentエコシステム/WWDC24Recap
noppefoxwolf
0
92
既存アプリをvisionOS対応してリリースした話/visionOS LT vol5
noppefoxwolf
0
240
UIのブラックボックスを探る/iOSDC23
noppefoxwolf
3
5.3k
CoreGraphicsでドット絵を描こう/iOSDC22
noppefoxwolf
0
3.3k
ランタイムデバッグのススメ/iOSDC21
noppefoxwolf
1
5.9k
Other Decks in Programming
See All in Programming
Enforcing Your Architecture with Unit Tests in the AI Era (Swift Connection X)
steliosf
PRO
1
150
クラウドエージェントは、 何がそんなに便利なのか / what makes cloud agents so useful
rkaga
5
810
SODA - FACT BOOK(EN)
sodainc
1
220
Getting Started with Vibe Coding
miccheng
0
190
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
350
Seven New Principles of Software Engineering
yegor256
0
470
React Native에 현대적인 빌드 도구 더하기: Rollipop 구현기
leegeunhyeok
0
180
まずはコードより業務と向き合う:テーブル解体のためにPdMを呼んだ話
sakawe_ee
0
190
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
170
Event is what happens
moro
2
4k
高橋メソッドでCVE解説シリーズ 〜CVE-2026-112816〜
hakkadaikon
0
230
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
140
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
630
Exploring anti-patterns in Rails
aemeredith
4
560
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
Evolving SEO for Evolving Search Engines
ryanjones
0
360
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
580
New Earth Scene 8
popppiees
4
2.8k
Music & Morning Musume
bryan
48
7.5k
Transcript
7JEFPEFDPEFPOJ04 QPUBUPUJQT ! !OPQQFGPYXPMG
OPQQF ‣ !OPQQFGPYXPMG ‣ ! ͖ͭͶ͖ ‣ J04ΞϓϦ։ൃ̔ %F/" ‣
ιʔγϟϧϥΠϒࣄۀ෦ ! !OPQQFGPYXPMG
! !OPQQFGPYXPMG
OPQQFGPYXPMG,JUTVOFCJ ಁաಈը࠶ੜϏϡʔϥΠϒϥϦ IUUQTHJUIVCDPNOPQQFGPYXPMG,JUTVOFCJ ! !OPQQFGPYXPMG
! !OPQQFGPYXPMG
,JUTVOFCJͷΈ ϏσΦͷσίʔυˠϚεΫ߹ˠඳը ! !OPQQFGPYXPMG
,JUTVOFCJͷΈ ϏσΦͷσίʔυˠϚεΫ߹ˠඳը ࠓ͜ͷลͷΛ͠·͢ ! !OPQQFGPYXPMG
ϏσΦϑΝΠϧͷલఏࣝ ྫ͑ɺNQNPWXNW ෳͷϝσΟΞίϯςφͷू·ΓɺओʹಈըͱԻ͕֨ ೲ͞Ε͍ͯΔͷ͕ҰൠతͳϑΥʔϚοτ ଞʹࣈນ੩ࢭըͷίϯςφؚ͕·ΕΔ͜ͱ͋Δ ! !OPQQFGPYXPMG
ϏσΦϑΝΠϧͷલఏࣝ ! !OPQQFGPYXPMG
ϏσΦϑΝΠϧͷσίʔυͱ ϝσΟΞίϯςφΛ࠶ੜग़དྷΔঢ়ଶʹ෮ݩ͢Δ ‣ ϏσΦίϯςφ͔Β̍ϑϨʔϜ͝ͱͷը૾Λऔಘ ‣ Իίϯςφ͔ΒԻใΛऔಘ ‣ ࣈນίϯςφ͔ΒจࣈྻΛऔಘ FUD ͜ΕΒΛߦͬͯಈըͱͯ͠࠶ੜ͢Δ
! !OPQQFGPYXPMG
ϏσΦͷίʔσοΫ ϏσΦίϯςφͷූ߸ԽʢΤϯίʔυʣํ๏ෳ͋ Δɻ ྫ͑ɺII71 ίʔσοΫͷҧ͍ʹΑͬͯѹॖॲཧʹඞཁͳύϫʔ ͕มΘΔɻ ! !OPQQFGPYXPMG
J04ͰͷϏσΦίϯςφͷσίʔυํ๏ ‣ "7"TTFU3FBEFS ‣ 75%FDPNQSFTTJPO4FTTJPO ‣ ⒎NQFH ! !OPQQFGPYXPMG
ରԠίʔσοΫͷ֬ೝ ͜ΕΒͷϑϨʔϜϫʔΫ෦Ͱ04ͷσίʔμ ͷ࣮Λར༻͍ͯ͠Δɻ ಉ͡NQͰ)͔)Έ͍ͨͳίʔσοΫͷҧ ͍͕͋Γɺ04ʹΑͬͯαϙʔτ͕ҟͳΔͷͰ ҙɻ ! !OPQQFGPYXPMG
ྫ͑)&7$Ұ෦ͷνοϓͰ͔͠ϋΠύϑΥʔϚϯεͳσίʔυΛ͢Δ͜ͱ͕Ͱ͖ͳ͍ɻ ! !OPQQFGPYXPMG
ରԠίʔσοΫͷ֬ೝ ެࣜαΠτͷ4QFDΈΕαϙʔτ͍ͯ͠ΔίʔσοΫ ͕Θ͔Δɻ ରԠίʔσοΫΛऔಘ͢Δϝιουݟ͔ͭΒͳ͔ͬ ͨɻ ! IUUQTXXXBQQMFDPNKQJQIPOFYTQFDTͱ͔ ! !OPQQFGPYXPMG
"7"TTFU3FBEFS let reader = try! AVAssetReader(asset: asset) let output =
AVAssetReaderTrackOutput(track: asset.videoTrack) reader.add(output) reader.startReading() output.copyNextSampleBuffer() output.copyNextSampleBuffer() output.copyNextSampleBuffer() ... ͱͯ؆୯ DPQZ/FYU4BNQMF#V⒎FSΛݺͿͨͼʹऔΕΔϑϨʔϜ ͷλΠϜελϯϓ͕ਐΉ ! !OPQQFGPYXPMG
"7"TTFU3FBEFSͷಛ ‣ ରԠίʔσοΫͰ͋ΕίʔσοΫΛؾʹͤͣʹσ ίʔυͰ͖Δ ‣ ඇৗʹ؆୯ͳΠϯλʔϑΣΠε ‣ ࣍ͷTBNQMF#V⒎FS͔͠औΕͳ͍ ! !OPQQFGPYXPMG
75%FDPNQSFTTJPO4FTTJPOͷಛ ϨΠϠʔͷϏσΦσίʔυ༻ϑϨʔϜϫʔΫ ଟ"7"TTFU3FBEFS"7"TTFU3FBEFS5SBDL0VUQVU ͜ΕΛ͍ͬͯΔʁ ෳࡶͰ໘ͳΘΓʹॊೈੑ͕ߴ͍ ! !OPQQFGPYXPMG
75%FDPNQSFTTJPO4FTTJPOͷྲྀΕ IBWDΛׂ ө૾ؚ͕·ΕΔνϟϯΫΛऔΓग़͢ 75%FDPNQSFTTJPO4FTTJPOΛੜ νϟϯΫΛ4FTTJPOʹ͢
σίʔυࡁΈͷ*NBHF#V⒎FS͕ίʔϧόοΫʹฦ͞ αϯϓϧͰྫͱͯ͠ΩʔϑϨʔϜΛऔΓग़͍ͯ͠Δ ! !OPQQFGPYXPMG
IBWDΛׂ /"-pMFGPSNBU ! !OPQQFGPYXPMG
! !OPQQFGPYXPMG
ө૾ؚ͕·ΕΔνϟϯΫΛऔΓग़͢ /"-ͷϔομΛࢀরͯ͠Yͷͷ͕ΩʔϑϨʔϜΛ ͍࣋ͬͯΔɻ ࠩใ͕ෆཁͳશͳϑϨʔϜ ! !OPQQFGPYXPMG
OBMVOJUUZQF *40*&$Ͱఆٛ IUUQXXXTUBSPDFBOTPSHFCPPL*40QEG ! !OPQQFGPYXPMG
75%FDPNQSFTTJPO4FTTJPOΛੜ VTDecompressionSessionCreate(_:, _:, _:, _:, _:, _:) ҾʹίʔϧόοΫઌϑϨʔϜͷใ QJYFM'PSNBU )ͷύϥϝʔλ
͕ඞཁ ! !OPQQFGPYXPMG
νϟϯΫΛ4FTTJPOʹ͢ CMSampleBufferCreateReady(sampleBuffer) VTDecompressionSessionDecodeFrame(_:, _:, _:, _:, &sampleBuffer) CZUFྻΛ͢ࣄग़དྷͳ͍ͷͰɺCZUFྻ͔Β ࡞ͬͨ#MPDL#V⒎FSΛݩʹ4BNQMF#V⒎FSΛ࡞Γ͢ɻ !
!OPQQFGPYXPMG
σίʔυࡁΈͷ*NBHF#V⒎FS͕ίʔϧόοΫʹฦ͞Ε Δ callback.decompressionOutputCallback = { (_, _, _, _, imageBuffer,
_, _) in // imageBuffer } 4FTTJPOʹొͨ͠DBMMCBDLσίʔυ͞Εͨ JNBHF#V⒎FS͕ฦͬͯ͘Δ ! !OPQQFGPYXPMG
! !OPQQFGPYXPMG
1SPT$POT &BTZ 4USFBNJOH 1FSGPSNBODF $VTUPNJ[F "7"TTFU3FB EFS P Y P
˚ 75%FDPNQSF TTJPO4FTTJPO Y P P P ϦϞʔτͷΞηοτͷQJYFM#V⒎FSऔΕͳ͍ ! !OPQQFGPYXPMG
75%FDPNQSFTTJPO4FTTJPO ‣ ετϦʔϛϯάͰΩϟϓνϟ͕औΕΔ ‣ "7"TTFU3FBEFSʹόά͕͋ͬͯେৎ ‣ ࢄͯ͠Τϯίʔυ͍ͨ࣌͠ͱ͔ʹศར ‣ ΤϥʔνΣοΫͱ͔ͪΌΜͱ͠ͳ͍ͱ͍͚ͳ͍ !
!OPQQFGPYXPMG
)%FDPEF4BNQMF IUUQTHJUIVCDPNOPQQFGPYXPMG)%FDPEF4BNQMF ! !OPQQFGPYXPMG
OPQQFGPYXPMG,JUTVOFCJ VTDecompressionSessionະαϙʔτ ύϑΥʔϚϯεʹҰఆͷޮՌ͕͋Γͦ͏Ͱ͋Ε࣮༧ ఆ ! !OPQQFGPYXPMG
J04%$ͷ$G1ग़ͯ͠Έ·ͨ͠ɻ ࠓճͷͷ΄͔ɺ,JUTVOFCJΛ.FUBMରԠͤͯ͞Ͳ͏ͳ Δͷ͔ͱ͔ൺֱͯ͠Έ͍ͨͱࢥ͍ͬͯ·͢ ! !OPQQFGPYXPMG