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
Video decode on iOS
Search
noppefoxwolf
June 21, 2018
Programming
3
2.2k
Video decode on iOS
iOS上でビデオコンテナのデコード手法をAssetReaderとVTDecompressSessionの比較を通して学びます。
noppefoxwolf
June 21, 2018
Tweet
Share
More Decks by noppefoxwolf
See All by noppefoxwolf
High performance GIF playback/iOSDC25
noppefoxwolf
1
260
Spice up your notifications/try!Swift25
noppefoxwolf
3
740
iOSの隠されたAPIを解明し、開発効率を向上させる方法/iOSDC24
noppefoxwolf
2
900
今から理解するApp Intentエコシステム/WWDC24Recap
noppefoxwolf
0
22
既存アプリをvisionOS対応してリリースした話/visionOS LT vol5
noppefoxwolf
0
200
UIのブラックボックスを探る/iOSDC23
noppefoxwolf
3
4.5k
CoreGraphicsでドット絵を描こう/iOSDC22
noppefoxwolf
0
2.7k
ランタイムデバッグのススメ/iOSDC21
noppefoxwolf
1
4.9k
google/mediapipe で始めるARアプリ開発/iOSDC2020
noppefoxwolf
1
1.6k
Other Decks in Programming
See All in Programming
Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job
hollycummins
0
230
2分台で1500examples完走!爆速CIを支える環境構築術 - Kaigi on Rails 2025
falcon8823
3
3.7k
Leading Effective Engineering Teams in the AI Era
addyosmani
6
440
技術的負債の正体を知って向き合う / Facing Technical Debt
irof
0
170
(Extension DC 2025) Actor境界を越える技術
teamhimeh
1
250
Serena MCPのすすめ
wadakatu
4
1k
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
180
私はどうやって技術力を上げたのか
yusukebe
43
19k
なぜあの開発者はDevRelに伴走し続けるのか / Why Does That Developer Keep Running Alongside DevRel?
nrslib
3
410
バッチ処理を「状態の記録」から「事実の記録」へ
panda728
PRO
0
160
Pull-Requestの内容を1クリックで動作確認可能にするワークフロー
natmark
2
510
NixOS + Kubernetesで構築する自宅サーバーのすべて
ichi_h3
0
900
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
6
440
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
Agile that works and the tools we love
rasmusluckow
331
21k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Speed Design
sergeychernyshev
32
1.2k
Making Projects Easy
brettharned
120
6.4k
KATA
mclloyd
32
15k
The Pragmatic Product Professional
lauravandoore
36
6.9k
How to Think Like a Performance Engineer
csswizardry
27
2k
Why Our Code Smells
bkeepers
PRO
340
57k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.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