SlideShare una empresa de Scribd logo
1 de 79
Introduction to AV Foundation
    Chris Adamson — @invalidname — http://www.subfurther.com/blog

    CocoaConf ’11 — Columbus, OH — August 12, 2011


Tuesday, August 23, 11
Road Map

    ✤    Fundamentals of Dynamic Media

    ✤    iOS Media Frameworks

    ✤    Playback

    ✤    Capture

    ✤    Editing

    ✤    Advanced Stuff


Tuesday, August 23, 11
The Fundamentals




Tuesday, August 23, 11
Analog



    ✤    Having a measurable value that is continuously variable

    ✤    Contrast to digital or “discrete” signals




Tuesday, August 23, 11
Audio

    ✤    Phonograph — Grooves
         vibrate a needle, which is
         amplified to a speaker

    ✤    Telephone — Voice vibrates
         microphone membrane,
         vibration is transmitted as
         voltage and reproduced by
         vibrating headset speaker

    ✤    Radio — Audio signal
         modulated on a carrier wave

Tuesday, August 23, 11
Film

    ✤    Light projected through
         translucent film frames onto
         screen

    ✤    Each frame held in place briefly
         (! 1/24 sec)

    ✤    Eye sees a moving image due
         to “persistence of vision”

    ✤    Sound may be out-of-band


Tuesday, August 23, 11
Television


    ✤    Chrominance and luminance
         sent as continuous AM signal

    ✤    CRT gun sweeps across screen
         in zig-zag pattern, illuminating
         phosphors

    ✤    Sound is FM in adjacent
         spectrum



Tuesday, August 23, 11
Digital Media


    ✤    Represents a continuous signal numerically

    ✤    Audio — sample the signal at some frequency

    ✤    Video — digital images as frames

    ✤    Other kinds of samples — text (captions, subtitles), metadata, web
         links, executable code, etc.




Tuesday, August 23, 11
Encoding

    ✤    How do we turn a digital signal into numbers

    ✤    Audio — Pulse Code Modulation (PCM). Each sample represents
         amplitude of audio signal at a specific time.

    ✤    Compressed audio — Lossless and lossy transformations to and from
         PCM

    ✤    Video — Series of images (e.g., M-JPEG), or keyframe image (i-frame)
         followed by deltas (p-frames and b-frames)

    ✤    Other media — Text samples are just strings

Tuesday, August 23, 11
Containers


    ✤    Transport and/or storage of encoded streams

    ✤    Examples: MP3, AIFF, QuickTime Movie, Core Audio Format, .mp4,
         MPEG-2 transport stream

    ✤    Containers may be optimized for streaming, editing, end-user
         delivery, etc.




Tuesday, August 23, 11
Tuesday, August 23, 11
Tuesday, August 23, 11
Metadata



    ✤    Information related to the audio data other than the signal itself

          ✤    Song title/album/artist, movie title, TV episode title/series, etc.

    ✤    Some containers support metadata, otherwise it is provided out-of-
         band




Tuesday, August 23, 11
Keep in mind…

    ✤    Different codecs may go in different containers

    ✤    A network stream is a container

    ✤    A media stream and a network stream are two different things

    ✤    Containers can contain multiple media streams

    ✤    A stream’s data is not necessarily in the container file

    ✤    Media samples may be in distinct places, or interleaved


Tuesday, August 23, 11
Media frameworks on iPhone OS /
    iOS




Tuesday, August 23, 11
iPhone 2 Media Frameworks

                         Core Audio /
                                         Low-level audio streaming
                           OpenAL




                         Media Player     Full-screen video player




                                         Obj-C wrapper for audio
                         AV Foundation
                                           playback (2.2 only)




Tuesday, August 23, 11
iPhone 3 Media Frameworks

                         Core Audio /
                                          Low-level audio streaming
                           OpenAL




                         Media Player    iPod library search/playback




                                           Obj-C wrapper for audio
                         AV Foundation
                                             playback, recording




Tuesday, August 23, 11
iOS 4 Media Frameworks

                         Core Audio /
                                           Low-level audio streaming
                           OpenAL


                         Media Player     iPod library search/playback


                                         Audio / Video capture, editing,
                         AV Foundation
                                              playback, export…


                          Core Video     Quartz effects on moving images


                                          Objects for representing media
                          Core Media
                                              times, formats, buffers



Tuesday, August 23, 11
AV Foundation in iPhone 2.2




Tuesday, August 23, 11
AV Foundation in iPhone 3.2




Tuesday, August 23, 11
AV Foundation in iOS 4




Tuesday, August 23, 11
Size is relative


                                      AV        android.            QuickTime
                                                           QT Kit
                                   Foundation    media               for Java



                         Classes      56          40        24        576


                         Methods      460        280       360      >10,000




Tuesday, August 23, 11
How do media frameworks work?




Tuesday, August 23, 11
Tuesday, August 23, 11
Tuesday, August 23, 11
Tuesday, August 23, 11
Tuesday, August 23, 11
“Boom Box” APIs


                    ✤    Simple API for playback, sometimes
                         recording

                    ✤    Little or no support for editing,
                         mixing, metadata, etc.

                    ✤    Example: HTML 5 <audio> tag




Tuesday, August 23, 11
“Streaming” APIs


                    ✤    Use “stream of audio” metaphor

                    ✤    Strong support for mixing, effects,
                         other real-time operations

                    ✤    Example: Core Audio




Tuesday, August 23, 11
“Streaming” APIs


                    ✤    Use “stream of audio” metaphor

                    ✤    Strong support for mixing, effects,
                         other real-time operations

                    ✤    Example: Core Audio
                         and AV Foundation (capture)




Tuesday, August 23, 11
“Document” APIs


                    ✤    Use “media document” metaphor

                    ✤    Strong support for editing

                    ✤    Mixing may be a special case of
                         editing

                    ✤    Example: QuickTime




Tuesday, August 23, 11
“Document” APIs


                    ✤    Use “media document” metaphor

                    ✤    Strong support for editing

                    ✤    Mixing may be a special case of
                         editing

                    ✤    Example: QuickTime
                         and AV Foundation (playback and editing)



Tuesday, August 23, 11
AV Foundation Classes


    ✤    Capture

    ✤    Assets and compositions

          ✤    Playback, editing, and export

    ✤    Legacy classes




Tuesday, August 23, 11
Assets and Players




Tuesday, August 23, 11
Demo
    VTM_AVPlayer




Tuesday, August 23, 11
AVAsset

    ✤    A collection of time-based media data

          ✤    Sound, video, text (closed captions, subtitles, etc.)

    ✤    Each distinct media type is contained in a track

    ✤    An asset represents the arrangement of the tracks. The tracks
         represent the traits of the media’s presentation (volume, pan, affine
         transforms, opacity, etc.).

    ✤    Asset ≠ media. Track ≠ media. Media = media.

    ✤    Also contains metadata (where common to all tracks)

Tuesday, August 23, 11
AVAsset subclasses


    ✤    AVURLAsset — An asset created from a URL, such as a song or
         movie file or network document/stream

    ✤    AVComposition — An asset created from assets in multiple files, used
         to combine and present media together.

          ✤    Used for editing




Tuesday, August 23, 11
AVPlayer

    ✤    Provides the ability to play an asset

          ✤    play, pause, seekToTime: methods; currentTime, rate properties

    ✤    Init with URL or with AVPlayerItem
         NSURL *url = [NSURL URLWithString:
               @"http://www.subfurther.com/video/running-start-
               iphone.m4v"];
         AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url
         ! ! ! ! ! ! ! ! options:nil];
         AVPlayerItem *playerItem = [AVPlayerItem
                        playerItemWithAsset:asset];
         player = [[AVPlayer playerWithPlayerItem:playerItem]
                        retain];

Tuesday, August 23, 11
AVPlayerLayer (or not)

    ✤    CALayer used to display video from a player

          ✤    Check that the media has video

              NSArray *visualTracks = [asset tracksWithMediaCharacteristic:
                             AVMediaCharacteristicVisual];
              if ((!visualTracks) ||
              ! ([visualTracks count] == 0)) {
              ! playerView.hidden = YES;
              ! noVideoLabel.hidden = NO;
              }




Tuesday, August 23, 11
AVPlayerLayer (no really)

    ✤    If you have video, create AVPlayerLayer from AVPlayer.

    ✤    Set bounds and video “gravity” (bounds-filling behavior)
            else {
            ! playerView.hidden = NO;
            ! noVideoLabel.hidden = YES;
            ! AVPlayerLayer *playerLayer = [AVPlayerLayer
                           playerLayerWithPlayer:player];
            ! [playerView.layer addSublayer:playerLayer];
            ! playerLayer.frame = playerView.layer.bounds;
            ! playerLayer.videoGravity =
                           AVLayerVideoGravityResizeAspect;
            }



Tuesday, August 23, 11
A brief sidetrack…




Tuesday, August 23, 11
HTTP Live
    Streaming




Tuesday, August 23, 11
HTTP Live Streaming


    ✤    Audio / Video network streaming standard developed by Apple

          ✤    Replaces RTP/RTSP

    ✤    Built-in support in iOS (AV Framework, Media Player) and Mac OS X
         10.6 (QTKit)

    ✤    Required for apps that stream more than 10 MB over cellular network




Tuesday, August 23, 11
How HTTP Live Streaming works

    ✤    Segmenting server splits source media into separate files
         (usually .m4a for audio-only, .ts for A/V), usually of about 10 seconds
         each, and creates an .m3u8 playlist file

          ✤    Playlist may point to bandwidth-appropriate playlists

    ✤    Clients download the playlist, fetch the segments, queue them up

    ✤    Server updates playlist periodically with latest segments; clients
         refresh playlist, fetch and queue new segments



Tuesday, August 23, 11
Steve’s .m3u8 playlists
                     #EXTM3U
                     #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=688301
                     http://qthttp.apple.com.edgesuite.net/
                     11piubpwiqubf06/0640_vod.m3u8




                         #EXTM3U
                         #EXT-X-TARGETDURATION:8
                         #EXT-X-MEDIA-SEQUENCE:0
                         #EXTINF:8,
                         0640/06400.ts
                         #EXTINF:8,
                         0640/06401.ts
                         #EXTINF:8,
                         0640/06402.ts
                         #EXTINF:8,
                         0640/06403.ts
Tuesday, August 23, 11
HTTP Live Streaming wins

    ✤    Works with existing file servers and content delivery networks

    ✤    Port 80 is never blocked

    ✤    Adapts to changes in available bandwidth

    ✤    Can be encrypted

    ✤    Has been submitted as a proposed IETF standard

          ✤    http://tools.ietf.org/html/draft-pantos-http-live-streaming-04


Tuesday, August 23, 11
HTTP Live Streaming fails


    ✤    Not really “live” when buffer can be a minute long

          ✤    Can’t watch a game on TV and listen to HLS web radio for the
               audio

    ✤    Modest adoption outside of the Apple world

          ✤    VLC 1.2, third-party Silverlight project, partial support in Android
               3.0



Tuesday, August 23, 11
HLS in AVF


         NSURL *url = [NSURL URLWithString:@"http://
         qthttp.apple.com.edgesuite.net/11piubpwiqubf06/sl_vod.m3u8"];
         AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url
         ! ! ! ! ! ! ! ! options:nil];


    ✤    Just use the .m3u8 to create an AVAsset like any other NSURL

    ✤    Do not check for presence of visual tracks immediately

          ✤    AVF needs to start parsing the stream before it knows what kinds
               of tracks it has

Tuesday, August 23, 11
Back to AV Foundation…




Tuesday, August 23, 11
Media Capture


    ✤    AV Foundation capture classes for audio / video capture, along with
         still image capture

          ✤    Programmatic control of white balance, autofocus, zoom, etc.

    ✤    Does not exist on the simulator. AV Foundation capture apps can
         only be compiled for and run on the device.

    ✤    API design is borrowed from QTKit on the Mac



Tuesday, August 23, 11
Capture Classes Seem Familiar?
                         QT Kit                 AV Foundation
          QTCaptureAudioPreviewOutput        AVCaptureAudioDataOutput
          QTCaptureConnection                AVCaptureConnection
          QTCaptureDecompressedAudioOutput   AVCaptureDevice
          QTCaptureDecompressedVideoOutput   AVCaptureFileOutput
          QTCaptureDevice                    AVCaptureInput
          QTCaptureDeviceInput               AVCaptureMovieFileOutput
          QTCaptureFileOutput                AVCaptureOutput
          QTCaptureInput                     AVCaptureSession
          QTCaptureLayer                     AVCaptureStillImageOutput
          QTCaptureMovieFileOutput           AVCaptureVideoDataOutput
          QTCaptureOutput                    AVCaptureVideoPreviewLayer
          QTCaptureSession
          QTCaptureVideoPreviewOutput
          QTCaptureView


Tuesday, August 23, 11
Capture Classes Seem Familiar?
                         QT Kit                 AV Foundation
          QTCaptureAudioPreviewOutput        AVCaptureAudioDataOutput
          QTCaptureConnection                AVCaptureConnection
          QTCaptureDecompressedAudioOutput   AVCaptureDevice
          QTCaptureDecompressedVideoOutput   AVCaptureFileOutput
          QTCaptureDevice                    AVCaptureInput
          QTCaptureDeviceInput               AVCaptureMovieFileOutput
          QTCaptureFileOutput                AVCaptureOutput
          QTCaptureInput                     AVCaptureSession
          QTCaptureLayer                     AVCaptureStillImageOutput
          QTCaptureMovieFileOutput           AVCaptureVideoDataOutput
          QTCaptureOutput                    AVCaptureVideoPreviewLayer
          QTCaptureSession
          QTCaptureVideoPreviewOutput
          QTCaptureView


Tuesday, August 23, 11
Capture basics

    ✤    Create an AVCaptureSession to coordinate the capture

    ✤    Investigate available AVCaptureDevices

    ✤    Create AVCaptureDeviceInput and connect it to the session

    ✤    Optional: set up an AVCaptureVideoPreviewLayer

    ✤    Optional: connect AVCaptureOutputs

    ✤    Tell the session to start recording


Tuesday, August 23, 11
Demo
    VTM_AVRecPlay




Tuesday, August 23, 11
Getting capture device and input

        AVCaptureDevice *videoDevice = [AVCaptureDevice
                defaultDeviceWithMediaType: AVMediaTypeVideo];
        if (videoDevice) {
        ! NSLog (@"got videoDevice");
        ! AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput
                       deviceInputWithDevice:videoDevice
        ! ! ! ! ! ! ! ! error:&setUpError];
        ! if (videoInput) {
        ! ! [captureSession addInput: videoInput];
        ! }
        }

         Note 1: You may also want to check for AVMediaTypeMuxed
         Note 2: Do not assume devices based on model (c.f. iPad
         Camera Connection Kit)

Tuesday, August 23, 11
Creating a video preview layer

         AVCaptureVideoPreviewLayer *previewLayer =
                      [AVCaptureVideoPreviewLayer
                      layerWithSession:captureSession];
         previewLayer.frame = captureView.layer.bounds;
         previewLayer.videoGravity =
                      AVLayerVideoGravityResizeAspect;
         [captureView.layer addSublayer:previewLayer];




                         Keep in mind that the iPhone cameras have a
                         portrait orientation

Tuesday, August 23, 11
Setting an output

      captureMovieOutput = [[AVCaptureMovieFileOutput alloc] init];
      if (! captureMovieURL) {
      ! captureMoviePath = [getCaptureMoviePath() retain];
      ! captureMovieURL = [[NSURL alloc]
                   initFileURLWithPath:captureMoviePath];
      }
      NSLog (@"recording to %@", captureMovieURL);
      [captureSession addOutput:captureMovieOutput];




                         We’ll use the captureMovieURL later…


Tuesday, August 23, 11
Start capturing


             [captureSession startRunning];
             recordButton.selected = YES;
             if ([[NSFileManager defaultManager]
                 fileExistsAtPath:captureMoviePath]) {
             ! [[NSFileManager defaultManager]
                 removeItemAtPath:captureMoviePath error:nil];
             }
             // note: must have a delegate
             [captureMovieOutput
             startRecordingToOutputFileURL:captureMovieURL
             ! ! ! ! ! ! ! ! recordingDelegate:self];




Tuesday, August 23, 11
Capture delegate callbacks

       - (void)captureOutput:(AVCaptureFileOutput *)captureOutput
           didStartRecordingToOutputFileAtURL:(NSURL *)fileURL
           fromConnections:(NSArray *)connections {
       ! NSLog (@"started recording to %@", fileURL);
       }

       - (void)captureOutput:(AVCaptureFileOutput *)captureOutput
           didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL
           fromConnections:(NSArray *)connections
           error:(NSError *)error {
       ! if (error) {
       ! ! NSLog (@"failed to record: %@", error);
       ! } else {
       ! ! NSLog (@"finished recording to %@", outputFileURL);
       ! }
       }

Tuesday, August 23, 11
More fun with capture


    ✤    Can analyze video data coming off the camera with the
         AVCaptureVideoDataOutput class

    ✤    Can provide uncompressed frames to your
         AVCaptureVideoDataOutputSampleBufferDelegate

    ✤    The callback provides you with a CMSampleBufferRef




Tuesday, August 23, 11
Surprise! Core Media!




Tuesday, August 23, 11
Core Media

    ✤    C-based framework containing structures that represent media
         samples and media timing

          ✤    Opaque types: CMBlockBuffer, CMBufferQueue,
               CMFormatDescription, CMSampleBuffer, CMTime, CMTimeRange

          ✤    Handful of convenience functions to work with these

    ✤    Buffer types provide wrappers around possibly-fragmented memory,
         time types provide timing at arbitrary precision



Tuesday, August 23, 11
Media Editing




Tuesday, August 23, 11
Video Editing? On iPhone?
    Really?




                         Comparison specs from everymac.com
Tuesday, August 23, 11
Video Editing? On iPhone?
    Really?
                1999:
         Power Mac G4 500 AGP




                          Comparison specs from everymac.com
Tuesday, August 23, 11
Video Editing? On iPhone?
    Really?
                1999:
         Power Mac G4 500 AGP




                          Comparison specs from everymac.com
Tuesday, August 23, 11
Video Editing? On iPhone?
    Really?
                1999:
         Power Mac G4 500 AGP




              CPU: 500 MHz G4
              RAM: 256 MB
              Storage: 20 GB HDD
                              Comparison specs from everymac.com
Tuesday, August 23, 11
Video Editing? On iPhone?
    Really?
                1999:                                                2010:
         Power Mac G4 500 AGP                                      iPhone 4




              CPU: 500 MHz G4
              RAM: 256 MB
              Storage: 20 GB HDD
                              Comparison specs from everymac.com
Tuesday, August 23, 11
Video Editing? On iPhone?
    Really?
                1999:                                                2010:
         Power Mac G4 500 AGP                                      iPhone 4




              CPU: 500 MHz G4
              RAM: 256 MB
              Storage: 20 GB HDD
                              Comparison specs from everymac.com
Tuesday, August 23, 11
Video Editing? On iPhone?
    Really?
                1999:                                                    2010:
         Power Mac G4 500 AGP                                          iPhone 4




              CPU: 500 MHz G4                                      CPU: 800 MHz Apple A4
              RAM: 256 MB                                          RAM: 512 MB
              Storage: 20 GB HDD                                   Storage: 16 GB Flash
                              Comparison specs from everymac.com
Tuesday, August 23, 11
Demo
    VTM_AVEditor




Tuesday, August 23, 11
AVComposition


    ✤    An AVAsset that gets its tracks from multiple file-based sources

    ✤    To create a movie, you typically use an AVMutableComposition


                composition = [[AVMutableComposition alloc] init];




Tuesday, August 23, 11
Copying from another asset

    ✤    -[AVMutableComposition insertTimeRange:ofAsset:atTime:error:]


        CMTime inTime = CMTimeMakeWithSeconds(inSeconds, 600);
        CMTime outTime = CMTimeMakeWithSeconds(outSeconds, 600);
        CMTime duration = CMTimeSubtract(outTime, inTime);
        CMTimeRange editRange = CMTimeRangeMake(inTime, duration);
        NSError *editError = nil;

        [targetController.composition insertTimeRange:editRange
        ! ! ! ! ! ! ! ofAsset:sourceAsset
                     atTime:targetController.composition.duration
        ! ! ! ! ! ! ! error:&editError];




Tuesday, August 23, 11
CMTime

    ✤    CMTime contains a value and a timescale (similar to QuickTime)

    ✤    Time scale is how the time is measured: “nths of a second”

          ✤    Time in seconds = value / timescale

          ✤    Allows for exact timing of any kind of media

    ✤    Different tracks of an asset can and will have different timescales

          ✤    Convert with CMTimeConvertScale()


Tuesday, August 23, 11
Track-level editing

    ✤    Add an AVMutableCompositionTrack to the composition

    ✤    Call -[AVMutableCompositionTrack
         insertTimeRange:ofTrack:atTime:error]

     musicAsset = [AVURLAsset URLAssetWithURL: musicURL
     ! ! ! ! ! ! ! !      options: nil];
     CMTimeRange musicRange = CMTimeRangeMake(
                    CMTimeMakeWithSeconds (0,600),
                    composition.duration);
     AVAssetTrack *musicAssetTrack = [[musicAsset
         tracksWithMediaType:AVMediaTypeAudio] objectAtIndex: 0];
     [musicTrack insertTimeRange:musicRange
     ! ! ! ! ! ofTrack:musicAssetTrack
     ! ! ! ! !     atTime:CMTimeMakeWithSeconds(0,600)
     ! ! ! ! !      error:&exportError];
Tuesday, August 23, 11
Export

    ✤    Create an AVAssetExportSession

    ✤    Must set outputURL and outputFileType properties

          ✤    Inspect possible types with supportedFileTypes property (list of
               AVFileType… strings in docs)

    ✤    Begin export with exportAsynchronouslyWithCompletionHandler:

          ✤    This takes a block, which will be called on completion, failure,
               cancellation, etc.


Tuesday, August 23, 11
Export
   AVAssetExportSession *exportSession =
       [[AVAssetExportSession alloc] initWithAsset:composition
   ! ! presetName:AVAssetExportPresetMediumQuality];
   exportSession.outputURL = exportURL;
   exportSession.outputFileType = @"com.apple.quicktime-movie";
   [exportSession exportAsynchronouslyWithCompletionHandler:^{
   ! NSLog (@"i is in your block, exportin. status is %d",
   ! !     exportSession.status);
   ! switch (exportSession.status) {
   ! ! case AVAssetExportSessionStatusFailed:
   ! ! case AVAssetExportSessionStatusCompleted: {
   ! ! ! [self performSelectorOnMainThread:
                 @selector (doPostExportUICleanup:)
         ! ! ! ! ! ! ! !        withObject:nil
         ! ! ! ! ! ! ! ! waitUntilDone:NO];
   ! ! ! break;
   ! ! }
   ! };
   }];
Tuesday, August 23, 11
Coming Up in Advanced…


    ✤    Capture-time data processing

    ✤    Writing raw samples

    ✤    Reading raw samples

    ✤    Multi-track editing with effects




Tuesday, August 23, 11
Q&A Time

    ✤    Cleaned-up code will be available on my blog:

          ✤    http://www.subfurther.com/blog

    ✤    invalidname [at] gmail.com

    ✤    @invalidname

    ✤    Check out the Rough Cut of my Core Audio book too.

    ✤    Get the WWDC sessions on AV Foundation


Tuesday, August 23, 11

Más contenido relacionado

Similar a Introduction to AV Foundation (CocoaConf, Aug '11)

Capturing Stills, Sounds, and Scenes with AV Foundation
Capturing Stills, Sounds, and Scenes with AV FoundationCapturing Stills, Sounds, and Scenes with AV Foundation
Capturing Stills, Sounds, and Scenes with AV FoundationChris Adamson
 
Core Audio Cranks It Up
Core Audio Cranks It UpCore Audio Cranks It Up
Core Audio Cranks It UpChris Adamson
 
Introduction to AV Foundation
Introduction to AV FoundationIntroduction to AV Foundation
Introduction to AV FoundationChris Adamson
 
Machinima Best Practices
Machinima Best PracticesMachinima Best Practices
Machinima Best Practices01archivist
 
Producing accessible video content for the web
Producing accessible video content for the webProducing accessible video content for the web
Producing accessible video content for the webVision Australia
 
How to make a video - Part 2: Post-Production Basics
How to make a video - Part 2: Post-Production BasicsHow to make a video - Part 2: Post-Production Basics
How to make a video - Part 2: Post-Production BasicsKris Brewer
 
Ig2 task 1 work sheet
Ig2 task 1 work sheetIg2 task 1 work sheet
Ig2 task 1 work sheetluisfvazquez1
 
Ig2task1worksheetelliot 140511141816-phpapp02
Ig2task1worksheetelliot 140511141816-phpapp02Ig2task1worksheetelliot 140511141816-phpapp02
Ig2task1worksheetelliot 140511141816-phpapp02ElliotBlack
 
Core Audio in iOS 6 (CocoaConf DC, March 2013)
Core Audio in iOS 6 (CocoaConf DC, March 2013)Core Audio in iOS 6 (CocoaConf DC, March 2013)
Core Audio in iOS 6 (CocoaConf DC, March 2013)Chris Adamson
 
IG2 Task 1 Work Sheet Elliot
IG2 Task 1 Work Sheet ElliotIG2 Task 1 Work Sheet Elliot
IG2 Task 1 Work Sheet ElliotElliotBlack
 
Ig2 task 1 work sheet lewis brady copy
Ig2 task 1 work sheet lewis brady copyIg2 task 1 work sheet lewis brady copy
Ig2 task 1 work sheet lewis brady copyLewisB2013
 
Brienna hick sound recording glossary
Brienna hick sound recording glossaryBrienna hick sound recording glossary
Brienna hick sound recording glossarysoulsama
 
Ig2 task 1 work sheet - JS
Ig2 task 1 work sheet - JSIg2 task 1 work sheet - JS
Ig2 task 1 work sheet - JSJamieShepherd
 
[@NaukriEngineering] Video handlings on apple platforms
[@NaukriEngineering] Video handlings on apple platforms[@NaukriEngineering] Video handlings on apple platforms
[@NaukriEngineering] Video handlings on apple platformsNaukri.com
 
IG2 Task 1 Work Sheet Elliot
IG2 Task 1 Work Sheet ElliotIG2 Task 1 Work Sheet Elliot
IG2 Task 1 Work Sheet ElliotElliotBlack
 
Ig2 task 1 work sheet (revisited)
Ig2 task 1 work sheet (revisited)Ig2 task 1 work sheet (revisited)
Ig2 task 1 work sheet (revisited)Mrrrjones
 

Similar a Introduction to AV Foundation (CocoaConf, Aug '11) (20)

Capturing Stills, Sounds, and Scenes with AV Foundation
Capturing Stills, Sounds, and Scenes with AV FoundationCapturing Stills, Sounds, and Scenes with AV Foundation
Capturing Stills, Sounds, and Scenes with AV Foundation
 
Core Audio Cranks It Up
Core Audio Cranks It UpCore Audio Cranks It Up
Core Audio Cranks It Up
 
Introduction to AV Foundation
Introduction to AV FoundationIntroduction to AV Foundation
Introduction to AV Foundation
 
Machinima Best Practices
Machinima Best PracticesMachinima Best Practices
Machinima Best Practices
 
Producing accessible video content for the web
Producing accessible video content for the webProducing accessible video content for the web
Producing accessible video content for the web
 
How to make a video - Part 2: Post-Production Basics
How to make a video - Part 2: Post-Production BasicsHow to make a video - Part 2: Post-Production Basics
How to make a video - Part 2: Post-Production Basics
 
Thingy editedd
Thingy editeddThingy editedd
Thingy editedd
 
Ig2 task 1 work sheet
Ig2 task 1 work sheetIg2 task 1 work sheet
Ig2 task 1 work sheet
 
Ig2task1worksheetelliot 140511141816-phpapp02
Ig2task1worksheetelliot 140511141816-phpapp02Ig2task1worksheetelliot 140511141816-phpapp02
Ig2task1worksheetelliot 140511141816-phpapp02
 
Core Audio in iOS 6 (CocoaConf DC, March 2013)
Core Audio in iOS 6 (CocoaConf DC, March 2013)Core Audio in iOS 6 (CocoaConf DC, March 2013)
Core Audio in iOS 6 (CocoaConf DC, March 2013)
 
Sound Recording Glossary
Sound Recording GlossarySound Recording Glossary
Sound Recording Glossary
 
IG2 Task 1
IG2 Task 1 IG2 Task 1
IG2 Task 1
 
IG2 Task 1 Work Sheet Elliot
IG2 Task 1 Work Sheet ElliotIG2 Task 1 Work Sheet Elliot
IG2 Task 1 Work Sheet Elliot
 
Thingy oldd
Thingy olddThingy oldd
Thingy oldd
 
Ig2 task 1 work sheet lewis brady copy
Ig2 task 1 work sheet lewis brady copyIg2 task 1 work sheet lewis brady copy
Ig2 task 1 work sheet lewis brady copy
 
Brienna hick sound recording glossary
Brienna hick sound recording glossaryBrienna hick sound recording glossary
Brienna hick sound recording glossary
 
Ig2 task 1 work sheet - JS
Ig2 task 1 work sheet - JSIg2 task 1 work sheet - JS
Ig2 task 1 work sheet - JS
 
[@NaukriEngineering] Video handlings on apple platforms
[@NaukriEngineering] Video handlings on apple platforms[@NaukriEngineering] Video handlings on apple platforms
[@NaukriEngineering] Video handlings on apple platforms
 
IG2 Task 1 Work Sheet Elliot
IG2 Task 1 Work Sheet ElliotIG2 Task 1 Work Sheet Elliot
IG2 Task 1 Work Sheet Elliot
 
Ig2 task 1 work sheet (revisited)
Ig2 task 1 work sheet (revisited)Ig2 task 1 work sheet (revisited)
Ig2 task 1 work sheet (revisited)
 

Más de Chris Adamson

Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)
Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)
Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)Chris Adamson
 
Whatever Happened to Visual Novel Anime? (JAFAX 2018)
Whatever Happened to Visual Novel Anime? (JAFAX 2018)Whatever Happened to Visual Novel Anime? (JAFAX 2018)
Whatever Happened to Visual Novel Anime? (JAFAX 2018)Chris Adamson
 
Media Frameworks Versus Swift (Swift by Northwest, October 2017)
Media Frameworks Versus Swift (Swift by Northwest, October 2017)Media Frameworks Versus Swift (Swift by Northwest, October 2017)
Media Frameworks Versus Swift (Swift by Northwest, October 2017)Chris Adamson
 
Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...
Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...
Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...Chris Adamson
 
CocoaConf Chicago 2017: Media Frameworks and Swift: This Is Fine
CocoaConf Chicago 2017: Media Frameworks and Swift: This Is FineCocoaConf Chicago 2017: Media Frameworks and Swift: This Is Fine
CocoaConf Chicago 2017: Media Frameworks and Swift: This Is FineChris Adamson
 
Forward Swift 2017: Media Frameworks and Swift: This Is Fine
Forward Swift 2017: Media Frameworks and Swift: This Is FineForward Swift 2017: Media Frameworks and Swift: This Is Fine
Forward Swift 2017: Media Frameworks and Swift: This Is FineChris Adamson
 
Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...
Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...
Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...Chris Adamson
 
Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)
Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)
Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)Chris Adamson
 
Firebase: Totally Not Parse All Over Again (Unless It Is)
Firebase: Totally Not Parse All Over Again (Unless It Is)Firebase: Totally Not Parse All Over Again (Unless It Is)
Firebase: Totally Not Parse All Over Again (Unless It Is)Chris Adamson
 
Building A Streaming Apple TV App (CocoaConf DC, Sept 2016)
Building A Streaming Apple TV App (CocoaConf DC, Sept 2016)Building A Streaming Apple TV App (CocoaConf DC, Sept 2016)
Building A Streaming Apple TV App (CocoaConf DC, Sept 2016)Chris Adamson
 
Revenge of the 80s: Cut/Copy/Paste, Undo/Redo, and More Big Hits (CocoaConf C...
Revenge of the 80s: Cut/Copy/Paste, Undo/Redo, and More Big Hits (CocoaConf C...Revenge of the 80s: Cut/Copy/Paste, Undo/Redo, and More Big Hits (CocoaConf C...
Revenge of the 80s: Cut/Copy/Paste, Undo/Redo, and More Big Hits (CocoaConf C...Chris Adamson
 
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014Chris Adamson
 
Stupid Video Tricks, CocoaConf Seattle 2014
Stupid Video Tricks, CocoaConf Seattle 2014Stupid Video Tricks, CocoaConf Seattle 2014
Stupid Video Tricks, CocoaConf Seattle 2014Chris Adamson
 
Stupid Video Tricks, CocoaConf Las Vegas
Stupid Video Tricks, CocoaConf Las VegasStupid Video Tricks, CocoaConf Las Vegas
Stupid Video Tricks, CocoaConf Las VegasChris Adamson
 
Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)
Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)
Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)Chris Adamson
 
Stupid Video Tricks (CocoaConf DC, March 2014)
Stupid Video Tricks (CocoaConf DC, March 2014)Stupid Video Tricks (CocoaConf DC, March 2014)
Stupid Video Tricks (CocoaConf DC, March 2014)Chris Adamson
 
Get On The Audiobus (CocoaConf Boston, October 2013)
Get On The Audiobus (CocoaConf Boston, October 2013)Get On The Audiobus (CocoaConf Boston, October 2013)
Get On The Audiobus (CocoaConf Boston, October 2013)Chris Adamson
 
Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)
Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)
Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)Chris Adamson
 
Core Audio in iOS 6 (CocoaConf San Jose, April 2013)
Core Audio in iOS 6 (CocoaConf San Jose, April 2013) Core Audio in iOS 6 (CocoaConf San Jose, April 2013)
Core Audio in iOS 6 (CocoaConf San Jose, April 2013) Chris Adamson
 

Más de Chris Adamson (20)

Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)
Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)
Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)
 
Whatever Happened to Visual Novel Anime? (JAFAX 2018)
Whatever Happened to Visual Novel Anime? (JAFAX 2018)Whatever Happened to Visual Novel Anime? (JAFAX 2018)
Whatever Happened to Visual Novel Anime? (JAFAX 2018)
 
Media Frameworks Versus Swift (Swift by Northwest, October 2017)
Media Frameworks Versus Swift (Swift by Northwest, October 2017)Media Frameworks Versus Swift (Swift by Northwest, October 2017)
Media Frameworks Versus Swift (Swift by Northwest, October 2017)
 
Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...
Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...
Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...
 
CocoaConf Chicago 2017: Media Frameworks and Swift: This Is Fine
CocoaConf Chicago 2017: Media Frameworks and Swift: This Is FineCocoaConf Chicago 2017: Media Frameworks and Swift: This Is Fine
CocoaConf Chicago 2017: Media Frameworks and Swift: This Is Fine
 
Forward Swift 2017: Media Frameworks and Swift: This Is Fine
Forward Swift 2017: Media Frameworks and Swift: This Is FineForward Swift 2017: Media Frameworks and Swift: This Is Fine
Forward Swift 2017: Media Frameworks and Swift: This Is Fine
 
Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...
Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...
Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...
 
Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)
Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)
Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)
 
Firebase: Totally Not Parse All Over Again (Unless It Is)
Firebase: Totally Not Parse All Over Again (Unless It Is)Firebase: Totally Not Parse All Over Again (Unless It Is)
Firebase: Totally Not Parse All Over Again (Unless It Is)
 
Building A Streaming Apple TV App (CocoaConf DC, Sept 2016)
Building A Streaming Apple TV App (CocoaConf DC, Sept 2016)Building A Streaming Apple TV App (CocoaConf DC, Sept 2016)
Building A Streaming Apple TV App (CocoaConf DC, Sept 2016)
 
Revenge of the 80s: Cut/Copy/Paste, Undo/Redo, and More Big Hits (CocoaConf C...
Revenge of the 80s: Cut/Copy/Paste, Undo/Redo, and More Big Hits (CocoaConf C...Revenge of the 80s: Cut/Copy/Paste, Undo/Redo, and More Big Hits (CocoaConf C...
Revenge of the 80s: Cut/Copy/Paste, Undo/Redo, and More Big Hits (CocoaConf C...
 
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
 
Stupid Video Tricks, CocoaConf Seattle 2014
Stupid Video Tricks, CocoaConf Seattle 2014Stupid Video Tricks, CocoaConf Seattle 2014
Stupid Video Tricks, CocoaConf Seattle 2014
 
Stupid Video Tricks, CocoaConf Las Vegas
Stupid Video Tricks, CocoaConf Las VegasStupid Video Tricks, CocoaConf Las Vegas
Stupid Video Tricks, CocoaConf Las Vegas
 
Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)
Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)
Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)
 
Stupid Video Tricks (CocoaConf DC, March 2014)
Stupid Video Tricks (CocoaConf DC, March 2014)Stupid Video Tricks (CocoaConf DC, March 2014)
Stupid Video Tricks (CocoaConf DC, March 2014)
 
Stupid Video Tricks
Stupid Video TricksStupid Video Tricks
Stupid Video Tricks
 
Get On The Audiobus (CocoaConf Boston, October 2013)
Get On The Audiobus (CocoaConf Boston, October 2013)Get On The Audiobus (CocoaConf Boston, October 2013)
Get On The Audiobus (CocoaConf Boston, October 2013)
 
Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)
Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)
Glitch-Free A/V Encoding (CocoaConf Boston, October 2013)
 
Core Audio in iOS 6 (CocoaConf San Jose, April 2013)
Core Audio in iOS 6 (CocoaConf San Jose, April 2013) Core Audio in iOS 6 (CocoaConf San Jose, April 2013)
Core Audio in iOS 6 (CocoaConf San Jose, April 2013)
 

Último

Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 

Último (20)

Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 

Introduction to AV Foundation (CocoaConf, Aug '11)

  • 1. Introduction to AV Foundation Chris Adamson — @invalidname — http://www.subfurther.com/blog CocoaConf ’11 — Columbus, OH — August 12, 2011 Tuesday, August 23, 11
  • 2. Road Map ✤ Fundamentals of Dynamic Media ✤ iOS Media Frameworks ✤ Playback ✤ Capture ✤ Editing ✤ Advanced Stuff Tuesday, August 23, 11
  • 4. Analog ✤ Having a measurable value that is continuously variable ✤ Contrast to digital or “discrete” signals Tuesday, August 23, 11
  • 5. Audio ✤ Phonograph — Grooves vibrate a needle, which is amplified to a speaker ✤ Telephone — Voice vibrates microphone membrane, vibration is transmitted as voltage and reproduced by vibrating headset speaker ✤ Radio — Audio signal modulated on a carrier wave Tuesday, August 23, 11
  • 6. Film ✤ Light projected through translucent film frames onto screen ✤ Each frame held in place briefly (! 1/24 sec) ✤ Eye sees a moving image due to “persistence of vision” ✤ Sound may be out-of-band Tuesday, August 23, 11
  • 7. Television ✤ Chrominance and luminance sent as continuous AM signal ✤ CRT gun sweeps across screen in zig-zag pattern, illuminating phosphors ✤ Sound is FM in adjacent spectrum Tuesday, August 23, 11
  • 8. Digital Media ✤ Represents a continuous signal numerically ✤ Audio — sample the signal at some frequency ✤ Video — digital images as frames ✤ Other kinds of samples — text (captions, subtitles), metadata, web links, executable code, etc. Tuesday, August 23, 11
  • 9. Encoding ✤ How do we turn a digital signal into numbers ✤ Audio — Pulse Code Modulation (PCM). Each sample represents amplitude of audio signal at a specific time. ✤ Compressed audio — Lossless and lossy transformations to and from PCM ✤ Video — Series of images (e.g., M-JPEG), or keyframe image (i-frame) followed by deltas (p-frames and b-frames) ✤ Other media — Text samples are just strings Tuesday, August 23, 11
  • 10. Containers ✤ Transport and/or storage of encoded streams ✤ Examples: MP3, AIFF, QuickTime Movie, Core Audio Format, .mp4, MPEG-2 transport stream ✤ Containers may be optimized for streaming, editing, end-user delivery, etc. Tuesday, August 23, 11
  • 13. Metadata ✤ Information related to the audio data other than the signal itself ✤ Song title/album/artist, movie title, TV episode title/series, etc. ✤ Some containers support metadata, otherwise it is provided out-of- band Tuesday, August 23, 11
  • 14. Keep in mind… ✤ Different codecs may go in different containers ✤ A network stream is a container ✤ A media stream and a network stream are two different things ✤ Containers can contain multiple media streams ✤ A stream’s data is not necessarily in the container file ✤ Media samples may be in distinct places, or interleaved Tuesday, August 23, 11
  • 15. Media frameworks on iPhone OS / iOS Tuesday, August 23, 11
  • 16. iPhone 2 Media Frameworks Core Audio / Low-level audio streaming OpenAL Media Player Full-screen video player Obj-C wrapper for audio AV Foundation playback (2.2 only) Tuesday, August 23, 11
  • 17. iPhone 3 Media Frameworks Core Audio / Low-level audio streaming OpenAL Media Player iPod library search/playback Obj-C wrapper for audio AV Foundation playback, recording Tuesday, August 23, 11
  • 18. iOS 4 Media Frameworks Core Audio / Low-level audio streaming OpenAL Media Player iPod library search/playback Audio / Video capture, editing, AV Foundation playback, export… Core Video Quartz effects on moving images Objects for representing media Core Media times, formats, buffers Tuesday, August 23, 11
  • 19. AV Foundation in iPhone 2.2 Tuesday, August 23, 11
  • 20. AV Foundation in iPhone 3.2 Tuesday, August 23, 11
  • 21. AV Foundation in iOS 4 Tuesday, August 23, 11
  • 22. Size is relative AV android. QuickTime QT Kit Foundation media for Java Classes 56 40 24 576 Methods 460 280 360 >10,000 Tuesday, August 23, 11
  • 23. How do media frameworks work? Tuesday, August 23, 11
  • 28. “Boom Box” APIs ✤ Simple API for playback, sometimes recording ✤ Little or no support for editing, mixing, metadata, etc. ✤ Example: HTML 5 <audio> tag Tuesday, August 23, 11
  • 29. “Streaming” APIs ✤ Use “stream of audio” metaphor ✤ Strong support for mixing, effects, other real-time operations ✤ Example: Core Audio Tuesday, August 23, 11
  • 30. “Streaming” APIs ✤ Use “stream of audio” metaphor ✤ Strong support for mixing, effects, other real-time operations ✤ Example: Core Audio and AV Foundation (capture) Tuesday, August 23, 11
  • 31. “Document” APIs ✤ Use “media document” metaphor ✤ Strong support for editing ✤ Mixing may be a special case of editing ✤ Example: QuickTime Tuesday, August 23, 11
  • 32. “Document” APIs ✤ Use “media document” metaphor ✤ Strong support for editing ✤ Mixing may be a special case of editing ✤ Example: QuickTime and AV Foundation (playback and editing) Tuesday, August 23, 11
  • 33. AV Foundation Classes ✤ Capture ✤ Assets and compositions ✤ Playback, editing, and export ✤ Legacy classes Tuesday, August 23, 11
  • 35. Demo VTM_AVPlayer Tuesday, August 23, 11
  • 36. AVAsset ✤ A collection of time-based media data ✤ Sound, video, text (closed captions, subtitles, etc.) ✤ Each distinct media type is contained in a track ✤ An asset represents the arrangement of the tracks. The tracks represent the traits of the media’s presentation (volume, pan, affine transforms, opacity, etc.). ✤ Asset ≠ media. Track ≠ media. Media = media. ✤ Also contains metadata (where common to all tracks) Tuesday, August 23, 11
  • 37. AVAsset subclasses ✤ AVURLAsset — An asset created from a URL, such as a song or movie file or network document/stream ✤ AVComposition — An asset created from assets in multiple files, used to combine and present media together. ✤ Used for editing Tuesday, August 23, 11
  • 38. AVPlayer ✤ Provides the ability to play an asset ✤ play, pause, seekToTime: methods; currentTime, rate properties ✤ Init with URL or with AVPlayerItem NSURL *url = [NSURL URLWithString: @"http://www.subfurther.com/video/running-start- iphone.m4v"]; AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url ! ! ! ! ! ! ! ! options:nil]; AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset]; player = [[AVPlayer playerWithPlayerItem:playerItem] retain]; Tuesday, August 23, 11
  • 39. AVPlayerLayer (or not) ✤ CALayer used to display video from a player ✤ Check that the media has video NSArray *visualTracks = [asset tracksWithMediaCharacteristic: AVMediaCharacteristicVisual]; if ((!visualTracks) || ! ([visualTracks count] == 0)) { ! playerView.hidden = YES; ! noVideoLabel.hidden = NO; } Tuesday, August 23, 11
  • 40. AVPlayerLayer (no really) ✤ If you have video, create AVPlayerLayer from AVPlayer. ✤ Set bounds and video “gravity” (bounds-filling behavior) else { ! playerView.hidden = NO; ! noVideoLabel.hidden = YES; ! AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player]; ! [playerView.layer addSublayer:playerLayer]; ! playerLayer.frame = playerView.layer.bounds; ! playerLayer.videoGravity = AVLayerVideoGravityResizeAspect; } Tuesday, August 23, 11
  • 42. HTTP Live Streaming Tuesday, August 23, 11
  • 43. HTTP Live Streaming ✤ Audio / Video network streaming standard developed by Apple ✤ Replaces RTP/RTSP ✤ Built-in support in iOS (AV Framework, Media Player) and Mac OS X 10.6 (QTKit) ✤ Required for apps that stream more than 10 MB over cellular network Tuesday, August 23, 11
  • 44. How HTTP Live Streaming works ✤ Segmenting server splits source media into separate files (usually .m4a for audio-only, .ts for A/V), usually of about 10 seconds each, and creates an .m3u8 playlist file ✤ Playlist may point to bandwidth-appropriate playlists ✤ Clients download the playlist, fetch the segments, queue them up ✤ Server updates playlist periodically with latest segments; clients refresh playlist, fetch and queue new segments Tuesday, August 23, 11
  • 45. Steve’s .m3u8 playlists #EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=688301 http://qthttp.apple.com.edgesuite.net/ 11piubpwiqubf06/0640_vod.m3u8 #EXTM3U #EXT-X-TARGETDURATION:8 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:8, 0640/06400.ts #EXTINF:8, 0640/06401.ts #EXTINF:8, 0640/06402.ts #EXTINF:8, 0640/06403.ts Tuesday, August 23, 11
  • 46. HTTP Live Streaming wins ✤ Works with existing file servers and content delivery networks ✤ Port 80 is never blocked ✤ Adapts to changes in available bandwidth ✤ Can be encrypted ✤ Has been submitted as a proposed IETF standard ✤ http://tools.ietf.org/html/draft-pantos-http-live-streaming-04 Tuesday, August 23, 11
  • 47. HTTP Live Streaming fails ✤ Not really “live” when buffer can be a minute long ✤ Can’t watch a game on TV and listen to HLS web radio for the audio ✤ Modest adoption outside of the Apple world ✤ VLC 1.2, third-party Silverlight project, partial support in Android 3.0 Tuesday, August 23, 11
  • 48. HLS in AVF NSURL *url = [NSURL URLWithString:@"http:// qthttp.apple.com.edgesuite.net/11piubpwiqubf06/sl_vod.m3u8"]; AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url ! ! ! ! ! ! ! ! options:nil]; ✤ Just use the .m3u8 to create an AVAsset like any other NSURL ✤ Do not check for presence of visual tracks immediately ✤ AVF needs to start parsing the stream before it knows what kinds of tracks it has Tuesday, August 23, 11
  • 49. Back to AV Foundation… Tuesday, August 23, 11
  • 50. Media Capture ✤ AV Foundation capture classes for audio / video capture, along with still image capture ✤ Programmatic control of white balance, autofocus, zoom, etc. ✤ Does not exist on the simulator. AV Foundation capture apps can only be compiled for and run on the device. ✤ API design is borrowed from QTKit on the Mac Tuesday, August 23, 11
  • 51. Capture Classes Seem Familiar? QT Kit AV Foundation QTCaptureAudioPreviewOutput AVCaptureAudioDataOutput QTCaptureConnection AVCaptureConnection QTCaptureDecompressedAudioOutput AVCaptureDevice QTCaptureDecompressedVideoOutput AVCaptureFileOutput QTCaptureDevice AVCaptureInput QTCaptureDeviceInput AVCaptureMovieFileOutput QTCaptureFileOutput AVCaptureOutput QTCaptureInput AVCaptureSession QTCaptureLayer AVCaptureStillImageOutput QTCaptureMovieFileOutput AVCaptureVideoDataOutput QTCaptureOutput AVCaptureVideoPreviewLayer QTCaptureSession QTCaptureVideoPreviewOutput QTCaptureView Tuesday, August 23, 11
  • 52. Capture Classes Seem Familiar? QT Kit AV Foundation QTCaptureAudioPreviewOutput AVCaptureAudioDataOutput QTCaptureConnection AVCaptureConnection QTCaptureDecompressedAudioOutput AVCaptureDevice QTCaptureDecompressedVideoOutput AVCaptureFileOutput QTCaptureDevice AVCaptureInput QTCaptureDeviceInput AVCaptureMovieFileOutput QTCaptureFileOutput AVCaptureOutput QTCaptureInput AVCaptureSession QTCaptureLayer AVCaptureStillImageOutput QTCaptureMovieFileOutput AVCaptureVideoDataOutput QTCaptureOutput AVCaptureVideoPreviewLayer QTCaptureSession QTCaptureVideoPreviewOutput QTCaptureView Tuesday, August 23, 11
  • 53. Capture basics ✤ Create an AVCaptureSession to coordinate the capture ✤ Investigate available AVCaptureDevices ✤ Create AVCaptureDeviceInput and connect it to the session ✤ Optional: set up an AVCaptureVideoPreviewLayer ✤ Optional: connect AVCaptureOutputs ✤ Tell the session to start recording Tuesday, August 23, 11
  • 54. Demo VTM_AVRecPlay Tuesday, August 23, 11
  • 55. Getting capture device and input AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType: AVMediaTypeVideo]; if (videoDevice) { ! NSLog (@"got videoDevice"); ! AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice ! ! ! ! ! ! ! ! error:&setUpError]; ! if (videoInput) { ! ! [captureSession addInput: videoInput]; ! } } Note 1: You may also want to check for AVMediaTypeMuxed Note 2: Do not assume devices based on model (c.f. iPad Camera Connection Kit) Tuesday, August 23, 11
  • 56. Creating a video preview layer AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession]; previewLayer.frame = captureView.layer.bounds; previewLayer.videoGravity = AVLayerVideoGravityResizeAspect; [captureView.layer addSublayer:previewLayer]; Keep in mind that the iPhone cameras have a portrait orientation Tuesday, August 23, 11
  • 57. Setting an output captureMovieOutput = [[AVCaptureMovieFileOutput alloc] init]; if (! captureMovieURL) { ! captureMoviePath = [getCaptureMoviePath() retain]; ! captureMovieURL = [[NSURL alloc] initFileURLWithPath:captureMoviePath]; } NSLog (@"recording to %@", captureMovieURL); [captureSession addOutput:captureMovieOutput]; We’ll use the captureMovieURL later… Tuesday, August 23, 11
  • 58. Start capturing [captureSession startRunning]; recordButton.selected = YES; if ([[NSFileManager defaultManager] fileExistsAtPath:captureMoviePath]) { ! [[NSFileManager defaultManager] removeItemAtPath:captureMoviePath error:nil]; } // note: must have a delegate [captureMovieOutput startRecordingToOutputFileURL:captureMovieURL ! ! ! ! ! ! ! ! recordingDelegate:self]; Tuesday, August 23, 11
  • 59. Capture delegate callbacks - (void)captureOutput:(AVCaptureFileOutput *)captureOutput didStartRecordingToOutputFileAtURL:(NSURL *)fileURL fromConnections:(NSArray *)connections { ! NSLog (@"started recording to %@", fileURL); } - (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error { ! if (error) { ! ! NSLog (@"failed to record: %@", error); ! } else { ! ! NSLog (@"finished recording to %@", outputFileURL); ! } } Tuesday, August 23, 11
  • 60. More fun with capture ✤ Can analyze video data coming off the camera with the AVCaptureVideoDataOutput class ✤ Can provide uncompressed frames to your AVCaptureVideoDataOutputSampleBufferDelegate ✤ The callback provides you with a CMSampleBufferRef Tuesday, August 23, 11
  • 62. Core Media ✤ C-based framework containing structures that represent media samples and media timing ✤ Opaque types: CMBlockBuffer, CMBufferQueue, CMFormatDescription, CMSampleBuffer, CMTime, CMTimeRange ✤ Handful of convenience functions to work with these ✤ Buffer types provide wrappers around possibly-fragmented memory, time types provide timing at arbitrary precision Tuesday, August 23, 11
  • 64. Video Editing? On iPhone? Really? Comparison specs from everymac.com Tuesday, August 23, 11
  • 65. Video Editing? On iPhone? Really? 1999: Power Mac G4 500 AGP Comparison specs from everymac.com Tuesday, August 23, 11
  • 66. Video Editing? On iPhone? Really? 1999: Power Mac G4 500 AGP Comparison specs from everymac.com Tuesday, August 23, 11
  • 67. Video Editing? On iPhone? Really? 1999: Power Mac G4 500 AGP CPU: 500 MHz G4 RAM: 256 MB Storage: 20 GB HDD Comparison specs from everymac.com Tuesday, August 23, 11
  • 68. Video Editing? On iPhone? Really? 1999: 2010: Power Mac G4 500 AGP iPhone 4 CPU: 500 MHz G4 RAM: 256 MB Storage: 20 GB HDD Comparison specs from everymac.com Tuesday, August 23, 11
  • 69. Video Editing? On iPhone? Really? 1999: 2010: Power Mac G4 500 AGP iPhone 4 CPU: 500 MHz G4 RAM: 256 MB Storage: 20 GB HDD Comparison specs from everymac.com Tuesday, August 23, 11
  • 70. Video Editing? On iPhone? Really? 1999: 2010: Power Mac G4 500 AGP iPhone 4 CPU: 500 MHz G4 CPU: 800 MHz Apple A4 RAM: 256 MB RAM: 512 MB Storage: 20 GB HDD Storage: 16 GB Flash Comparison specs from everymac.com Tuesday, August 23, 11
  • 71. Demo VTM_AVEditor Tuesday, August 23, 11
  • 72. AVComposition ✤ An AVAsset that gets its tracks from multiple file-based sources ✤ To create a movie, you typically use an AVMutableComposition composition = [[AVMutableComposition alloc] init]; Tuesday, August 23, 11
  • 73. Copying from another asset ✤ -[AVMutableComposition insertTimeRange:ofAsset:atTime:error:] CMTime inTime = CMTimeMakeWithSeconds(inSeconds, 600); CMTime outTime = CMTimeMakeWithSeconds(outSeconds, 600); CMTime duration = CMTimeSubtract(outTime, inTime); CMTimeRange editRange = CMTimeRangeMake(inTime, duration); NSError *editError = nil; [targetController.composition insertTimeRange:editRange ! ! ! ! ! ! ! ofAsset:sourceAsset atTime:targetController.composition.duration ! ! ! ! ! ! ! error:&editError]; Tuesday, August 23, 11
  • 74. CMTime ✤ CMTime contains a value and a timescale (similar to QuickTime) ✤ Time scale is how the time is measured: “nths of a second” ✤ Time in seconds = value / timescale ✤ Allows for exact timing of any kind of media ✤ Different tracks of an asset can and will have different timescales ✤ Convert with CMTimeConvertScale() Tuesday, August 23, 11
  • 75. Track-level editing ✤ Add an AVMutableCompositionTrack to the composition ✤ Call -[AVMutableCompositionTrack insertTimeRange:ofTrack:atTime:error] musicAsset = [AVURLAsset URLAssetWithURL: musicURL ! ! ! ! ! ! ! ! options: nil]; CMTimeRange musicRange = CMTimeRangeMake( CMTimeMakeWithSeconds (0,600), composition.duration); AVAssetTrack *musicAssetTrack = [[musicAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex: 0]; [musicTrack insertTimeRange:musicRange ! ! ! ! ! ofTrack:musicAssetTrack ! ! ! ! ! atTime:CMTimeMakeWithSeconds(0,600) ! ! ! ! ! error:&exportError]; Tuesday, August 23, 11
  • 76. Export ✤ Create an AVAssetExportSession ✤ Must set outputURL and outputFileType properties ✤ Inspect possible types with supportedFileTypes property (list of AVFileType… strings in docs) ✤ Begin export with exportAsynchronouslyWithCompletionHandler: ✤ This takes a block, which will be called on completion, failure, cancellation, etc. Tuesday, August 23, 11
  • 77. Export AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:composition ! ! presetName:AVAssetExportPresetMediumQuality]; exportSession.outputURL = exportURL; exportSession.outputFileType = @"com.apple.quicktime-movie"; [exportSession exportAsynchronouslyWithCompletionHandler:^{ ! NSLog (@"i is in your block, exportin. status is %d", ! ! exportSession.status); ! switch (exportSession.status) { ! ! case AVAssetExportSessionStatusFailed: ! ! case AVAssetExportSessionStatusCompleted: { ! ! ! [self performSelectorOnMainThread: @selector (doPostExportUICleanup:) ! ! ! ! ! ! ! ! withObject:nil ! ! ! ! ! ! ! ! waitUntilDone:NO]; ! ! ! break; ! ! } ! }; }]; Tuesday, August 23, 11
  • 78. Coming Up in Advanced… ✤ Capture-time data processing ✤ Writing raw samples ✤ Reading raw samples ✤ Multi-track editing with effects Tuesday, August 23, 11
  • 79. Q&A Time ✤ Cleaned-up code will be available on my blog: ✤ http://www.subfurther.com/blog ✤ invalidname [at] gmail.com ✤ @invalidname ✤ Check out the Rough Cut of my Core Audio book too. ✤ Get the WWDC sessions on AV Foundation Tuesday, August 23, 11