techniken: iphone multimedia
DESCRIPTION
Techniken: iPhone Multimedia. Universität zu Köln Re-usable Content in 3D Johannes Döhrn SS 2012. Inhalt. Audio SystemSounds AVAudioPlayer Audioaufnahme AudioToolbox Video MediaPlayer Videoaufnahme MediaKit Filme auswählen und bearbeiten MPMediaPickerController - PowerPoint PPT PresentationTRANSCRIPT
Techniken: iPhone Multimedia
Universität zu KölnRe-usable Content in 3D
Johannes DöhrnSS 2012
Audio SystemSounds AVAudioPlayer Audioaufnahme AudioToolbox
Video MediaPlayer Videoaufnahme
MediaKit Filme auswählen und bearbeiten MPMediaPickerController MPMusicPlayerController
Inhalt
Audio
- Gebrauch in Applications- Soundeffekte (Klicks, Warnungen, andere kurze
Sounds)- Musik, Podcasts, Hörbücher etc.- Streams aus dem Internet- Aufgenommene Audioinhalte
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)
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
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);
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);}
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
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];}
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;}
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
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
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
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
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
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
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
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
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
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];}
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
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
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];
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
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
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
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