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
開発生産性を上げるための生成AI活用術
starfish719
3
1.1k
XP, Testing and ninja testing ZOZ5
m_seki
3
690
overlayPreferenceValue で実現する ピュア SwiftUI な AdMob ネイティブ広告
uhucream
0
180
bootcamp2025_バックエンド研修_WebAPIサーバ作成.pdf
geniee_inc
0
110
作って理解するGOCACHEPROG / Go Conference 2025(Workshop)
mazrean
0
100
品質ワークショップをやってみた
nealle
0
400
10年もののAPIサーバーにおけるCI/CDの改善の奮闘
mbook
0
830
他言語経験者が Golangci-lint を最初のコーディングメンターにした話 / How Golangci-lint Became My First Coding Mentor: A Story from a Polyglot Programmer
uma31
0
180
技術的負債の正体を知って向き合う / Facing Technical Debt
irof
0
180
Claude Agent SDK を使ってみよう
hyshu
0
910
Claude CodeによるAI駆動開発の実践 〜そこから見えてきたこれからのプログラミング〜
iriikeita
0
270
アメ車でサンノゼを走ってきたよ!
s_shimotori
0
230
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
53
7.8k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Build your cross-platform service in a week with App Engine
jlugia
232
18k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
RailsConf 2023
tenderlove
30
1.2k
BBQ
matthewcrist
89
9.8k
Why Our Code Smells
bkeepers
PRO
340
57k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Building an army of robots
kneath
306
46k
A designer walks into a library…
pauljervisheath
209
24k
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