Download - Techniken: iPhone Multimedia

Transcript
Page 1: Techniken: iPhone Multimedia

Techniken: iPhone Multimedia

Universität zu KölnRe-usable Content in 3D

Johannes DöhrnSS 2012

Page 2: Techniken: iPhone Multimedia

Audio SystemSounds AVAudioPlayer Audioaufnahme AudioToolbox

Video MediaPlayer Videoaufnahme

MediaKit Filme auswählen und bearbeiten MPMediaPickerController MPMusicPlayerController

Inhalt

Page 3: Techniken: iPhone Multimedia

Audio

- Gebrauch in Applications- Soundeffekte (Klicks, Warnungen, andere kurze

Sounds)- Musik, Podcasts, Hörbücher etc.- Streams aus dem Internet- Aufgenommene Audioinhalte

Page 4: Techniken: iPhone Multimedia

Audio

CoreAudio:- Einfacher Gebrauch:

- System Sound API – kurze Soundgeräusche- AVAudioPlayer – ObjC, simple API

- Komplex, aber mit besseren ‚Controls‘:- AudioToolbox – aufnehmen und abspielen, Streaming- AudioUnits – komplexe Audio-Plug-Ins zum Bearbeiten von

Audio-Dateien (Filterung, Hall, Sampling, MIDI-basierte Synthesizer etc.)

- OpenAL – 3D Sound (z.B. bei Ego-Shootern)

Page 5: Techniken: iPhone Multimedia

Xcode: Vor dem Start…

Disable Automatic Reference Counting (ARC)- Project/Build Settings/Levels -> in die Suchleiste ‚automatic‘

eingeben/ARC von ‚YES‘ auf ‚NO‘

Frameworks hinzufügen:- Project Navigator / Project / Build Phases / Link Binary With Libraries –> Add (+) -> AVFoundation.framework; AudioToolbox.framwork; MediaPlayer.framework

Page 6: Techniken: iPhone Multimedia

AudioSystem Sound API- Kurze Soundgeräusche (> 5 sec)- Sehr simple API, aber

- Keine Schleifenwiedergabe- Keine Handhabung der Lautstärke- Umgehendes Playback- Nur wenige unterstützte Formate

- Linear PCM oder IMA4- .caf-, .aif-, oder .wav-Dateien

- Code:NSURL *dateiURL = ... // url zu der DateiSystemSoundID myID;// Sound initialisierenAudioServicesCreateSystemSoundID ((CFURLRef)dateiURL, &myID);// Dann abspielenAudioServicesPlaySystemSound (myID);

Page 7: Techniken: iPhone Multimedia

Audio

System Sound API- Aufräumen:

- Wenn abgespielt oder eine Warnung auftritt, abbrechen- Code:

SystemSoundID myID;

//abbrechen des zuvor initialisierten SoundsAudioServicesDisposeSystemSoundID (myID);

Vibration- Erlaubt das Auslösen der Vibration

- (void) vibrate {AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);}

Page 8: Techniken: iPhone Multimedia

Audio

AVAudioPlayer- Ermöglicht das Abspielen längerer Sounds- Lokal gespeicherte Daten (kein Streaming)- Ermöglicht Schleifenwiedergabe, bestimmen und wählen der

Wiedergabeposition, Play, Pause- Audiopegel können überwacht werden- Gleichzeitige Wiedergabe mehrerer Sound-Daten- Cocoa-basiertes Interface

- Initialisierung über Datei-URL oder Daten- Ermöglicht die Delegation zwischen Objekten

- Unterstützt viele Audio-Formate

Page 9: Techniken: iPhone Multimedia

Audio

AVAudioPlayer:- Initialisierung

self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:self.path] error:&error];

if (!self.player){NSLog(@"Error: %@", [error localizedDescription]);return NO;}

- Einfache Methoden zum Starten/StoppenIf (!self.player.playing) {

[self.player play];} else {

[self.player pause];}

Page 10: Techniken: iPhone Multimedia

AudioAVAudioPlayer:- Vorbereitung des Players, um mit der Wiedergabe beginnen zu

können[self.player prepareToPlay]- Vollständiges Beenden der Wiedergabe durch self.player stop- Audiopegel:

- Einrichten der Eigenschaft meteringEnabled = YES;- Aktualisierung der Pegelstände durch updateMeters -> ablesen der

Stände durch peakPowerForChannel und averagePowerForChannel- Die Lautstärke wird mit der Eigenschaft volume ermittelt

- (void) setVolume: (id) sender //Anpassung der Lautstärke bei Betätigung des Reglers{if (self.player) self.player.volume = volumeSlider.value;}

Page 11: Techniken: iPhone Multimedia

AudioAVAudioPlayer:- Wiedergabeposition bestimmen und wählen

- Eigenschaften currentTime und durationself.player.currentTime = scrubber.value * self.player.duration; // Positionswahl durch UISlider- Nach Ende der Bewegung des Slider, wird Wiedergabe an der

gewählten Position wieder aufgenommen- (void) scrubbingDone: (id) sender{[self play:nil];}- Ende der Wiedergabe- Delegierungs-Callback audioPlayerDidFinishPlaying:successfully

- Bsp.- https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015

839a0917e1dcd407d055890236/C15-Media/01-Play%20Audio

Page 12: Techniken: iPhone Multimedia

AudioSchleifenwiedergabe:- Ermöglicht das Gestalten von Hintergrundgeräuschen, durch

Schleifenwiedergabe (self.player setNumberOfLoops)- Fading-Effekt- https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839a0917e1dcd

407d055890236/C15-Media/02-Audio%20Loop

Unterbrechungen:- z.B. bei Eingang eines Telefonats, Gerät übernimmt- Audiositzung wird deaktiviert (audioPlayerBeginInteruption)- Wird das Telefonat abgelehnt oder endet, bevor der Benutzer antworten

konnte, wird die Wiedergabe wieder aufgenommen (audioPlayerEndInteruption)

- Die Aktuelle Abspielposition kann gespeichert werden- https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839a0917e1dcd

407d055890236/C15-Media/03-Audio%20Interruptions

Page 13: Techniken: iPhone Multimedia

AudioAudioaufnahme:- Einrichtung einer AVAudioSession- Verwenden einer Aufnahmesitzung (AVAudioSessionCategoryRecord) o.

Wiedergabe- und Aufnahme (AVAudioSessionCategoryPlayAndRecord)

- Aufnahme- Aufnahmeeinstellungen, die beschreiben, wie die Aufnahme erfasst

werden soll- z.B. AudioFormat, Sample-Rate (Abtastvorgänge), Kanäle (mono,

stereo) etc.- Initialisierung des zugewiesenen Recorders durch Datei-URL und

Dictionary- Initialisierung der Delegierung, Pegelmessung etc.- Einrichten eines Timers zur Beobachtung der Pegel und der

Aufnahmeposition

Page 14: Techniken: iPhone Multimedia

Audio

Audioaufnahme:- Audiometer (updateMeters) funktioniert wie beim

AVAudioPlayer- Durch stopRecording wird

audioRecorderDidFinishRecording:successfully ausgelöst und die Oberfläche für die Wiedergabe bereitgemacht

- Bsp.- https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d1

7015839a0917e1dcd407d055890236/C15-Media/05-Record%20Audio

Page 15: Techniken: iPhone Multimedia

AudioAudioToolbox:- Audio File Stream Services & Audio Queue Services- Unterstützt eine größere Anzahl von Formaten- Bessere Kontrolle über die Wiedergabe

- z.B. Streaming von Audio über ein Netzwerk

Queue:- Ermöglicht die Aneinanderreihung von Audio-Dateien in einer

Warteschlange- Spezifiziert, welcher Song wann gespielt werden soll- Bsp. iPod (Playlist)- Ermöglicht Aufnahme- Leistungsfähige, systemnahe, aufwendige Audioroutinen

Page 16: Techniken: iPhone Multimedia

Audio

Audioaufnahme:- Erstelle eine Queue- Definiere eine callback-Funktion um das Aufgenommene zu

erhalten- Starte die Queue- Speicherung der erhaltenen Daten- Beende die Queue

Bsp:- ‚Speak Here‘ (iOS Dev Center)- https://github.com/erica/iphone-3.0-cookbook-/blob/b8ca8905d1701583

9a0917e1dcd407d055890236/C15-Media/06-AudioQueue%20Recording

Page 17: Techniken: iPhone Multimedia

VideoGebrauch von Video:- Szenische Animationen in einem Spiel- Stream-Inhalte aus dem Internet- Abspielen lokaler Videos

MediaPlayer:- Abspielen von Videos über application bundle oder URL

- Player immer ‚Full Screen‘- Maßstab kann konfiguriert werden- Optionale controls

- Unterstützt:- .mov, .mp4, .m4v, .3gp

- Bsp.- https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839

a0917e1dcd407d055890236/C15-Media/07-OffsiteVideo

Page 18: Techniken: iPhone Multimedia

Video

MPMoviePlayerController:- Gehört zum Framework ‚MediaPlayer‘

- (id)initWithContentURL:(NSURL *)url;- (void)play;- (void)stop;

- Eigenschaften:- backgroundColor (u.a. clear)- scalingMode – aspect fit, aspect fill, fill, no scaling- movieControlMode – default, volume only, hidden

- Notifikationen:- MPMoviePlayerPlaybackDidFinishNotification (bei Ende der

Wiedergabe oder ‚Done‘)- Video ist bereit zu starten- Änderungen des Maßstabs

Page 19: Techniken: iPhone Multimedia

Video

Videoaufnahme:- Überprüfung, ob Kamera vorhanden

- (BOOL) videoRecordingAvailable{if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) return NO;return [[UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera] containsObject:@"public.movie"];}

- Videoaufzeichnung ähnelt Aufnahme von Einzelbildern- Zuweisung und Initialisierung eines Bild-Pickers- Einrichtung seiner Delegierung- Auswahl, ob Bearbeitung und Darstellung

Page 20: Techniken: iPhone Multimedia

VideoVideoaufnahme:- Festlegung von Eigenschaften im Videorecorder:

- Bildqualität (ipc.videoQuality)- Maximale Filmdauer in Sekunden (ipc.videoMaximumDuration)- Medientyp-Array: eine Liste mit dem Objekt public.movie

- Eventuell auch public.image, um zwischen Video und Bild zu wechseln

- (void) recordVideo: (id) sender {UIImagePickerController *ipc = [[UIImagePickerController alloc] init];ipc.sourceType = UIImagePickerControllerSourceTypeCamera;ipc.delegate = self;ipc.allowsEditing = YES;ipc.videoQuality = UIImagePickerControllerQualityTypeMedium;ipc.videoMaximumDuration = 30.0f; // 30 secondsipc.mediaTypes = [NSArray arrayWithObject:@"public.movie"];// ipc.mediaTypes = [NSArray arrayWithObjects:@"public.movie",

@"public.image", nil];[self presentModalViewController:ipc animated:YES];}

Page 21: Techniken: iPhone Multimedia

Video

Videoaufnahme:- Speicherung:

- didFinishSavingWithError überprüft, ob Fehler vorhanden- Falls nicht, kann die Datei mit der Funktion

UISaveVideoAtPathToSavedPhotosAlbum() gespeichert werden.

- Bsp:- https://github.com/erica/iphone-3.0-cookbook-/blob/b8ca8905

d17015839a0917e1dcd407d055890236/C15-Media/08-RecordingVideo

Page 22: Techniken: iPhone Multimedia

Video

Auswählen und Bearbeiten:- Erstellung eines reinen Video-Pickers (s. Videorecorder)- Überprüfung, ob das Video bearbeitet werden kann (Methode

canEditVideoAtPath der Klasse UIVideoEditorController)- Wenn ja, neuer Editor weist Eigenschaften delegate und

videoPath zu- Callbacks zum Handhaben für den Erfolg / Fehlschlag des

Vorgangs oder den Abbruch durch den Benutzer- Nach Beendigung der Bearbeitung, Speicherung

(videoEditorController:didSaveEditedVideoToPath)- Bsp:

- https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839a0917e1dcd407d055890236/C15-Media/09-Editing%20Video

Page 23: Techniken: iPhone Multimedia

Audioauswahl

MPMediaPickerController:- Ermöglicht Auswahl von Elementen, wie Musikstücke, Podcasts

und Hörbüchern aus der Musikbibliothek- Oberfläche im iPod-Stil (z.B. Durchsuchen von Wiedergabelisten,

Listen von Künstlern und Songs, Alben etc.)- Erstellung eines neuen Pickers; Initialisierung mit gewünschtem

Medientyp (MPMediaTypeMusic, MPMediaTypePodcast, _Audio, _AnyAudio, _Any)

MPMediaPickerController *mpc = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic];mpc.delegate = self;mpc.prompt = @"Please select an item";mpc.allowsPickingMultipleItems = YES;[self presentModalViewController:mpc animated:YES];

Page 24: Techniken: iPhone Multimedia

AudioauswahlMPMediaPickerController:- Benutzerauswahl abschließen:

- Callback mediaPicker:didPickMediaItems- Instanz MPMediaItemCollection:

- Kann durch Zugriff auf ihre Elemente aufgelistet werden.- Jedes Element (Item) ist ein Member der Klasse

MPMediaItem- Eigenschaften (Property) von MPMediaItem können

abgefragt werden (z.B. MPMediaItemPropertyTitle, MPMediaItemPropertyArtist etc.)

- Bsp.- https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839

a0917e1dcd407d055890236/C15-Media/10-Media%20Picker

Page 25: Techniken: iPhone Multimedia

MedienabfragenMPMediaQuery:- Filterung der Inhalte einer iPod-Bibliothek und Einschränkung

des Suchbereichs- 9 vordefinierte Suchvorgänge (z.B. albumsQuery, artistsQuery)- Dazugehörige Gruppierungstypen legen die Gliederung der

zurückgegebenen Daten fest (z.B. MPMediaGroupingAlbum)- Beispiel einer Abfrage (hier: Anzahl der Alben)

MPMediaQuery *query = [MPMediaQuery albumsQuery];NSArray *collections = query.collections;NSLog(@"You have %d albums in your library\n", collections.count);- Prädikate:- Prädikate aus Medieneigenschaften filtern die zurückgegebenen

Elemente- Bsp.

- https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839a0917e1dcd407d055890236/C15-Media/11-Media%20Query

Page 26: Techniken: iPhone Multimedia

Audio

MPMusicPlayerController:- Ein weiterer komplexer Musik-Player für Musiksammlungen- Veröffentlicht optionale Benachrichtigungen, wenn sich der

Wiedergabestatus ändert- Ermöglicht zufällige Reihenfolge bei Wiedergabe (Eigenschaft

shuffleMode); Wiederholungsmodus (repeatMode)- Ermöglicht das Anzeigen von Grafiken aus einem Album

(MPMediaItemArtwork)

- Bsp.- https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839a

0917e1dcd407d055890236/C15-Media/12-Pick%20and%20Play

Page 27: Techniken: iPhone Multimedia

Quellen

- Sadun, Erica: Das große iPhone Entwicklerbuch. München 2010.- Codes:

http://github.com/erica/iphone-3.0-cookbook-- ‚Audio APIs, Video Playback, Displaying Web Content,

Settings‘, von Alan Cannistraro (Stanford University) http://www.youtube.com/watch?v=vTFT0G11VfY

- ‚Speak Here‘, iOS Developer Library. https://developer.apple.com/library/ios/#samplecode/SpeakHere/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007802