Mul$media ¡Techniques ¡ in ¡Android ¡ Some ¡of ¡the ¡informa$on ¡in ¡this ¡sec$on ¡ is ¡adapted ¡from ¡WiseAndroid.com ¡
Mul$media ¡Support ¡ • Android ¡provides ¡comprehensive ¡mul$media ¡func$onality: ¡ – Audio: ¡all ¡standard ¡formats ¡including ¡MP3, ¡Ogg, ¡Midi, ¡… ¡ – Video: ¡MPEG-‑4, ¡H.263, ¡H.264, ¡ ¡ – Images: ¡PNG ¡(preferred), ¡JPEG, ¡GIF ¡(not ¡recommended) ¡ • Several ¡different ¡media ¡formats ¡and ¡codecs ¡are ¡supported ¡ • You ¡can ¡play ¡audio ¡or ¡video ¡from ¡media ¡files ¡stored ¡in ¡the ¡ applica$on's ¡resources ¡(raw ¡resources), ¡from ¡standalone ¡files ¡ in ¡the ¡filesystem, ¡or ¡from ¡a ¡data ¡stream ¡arriving ¡over ¡a ¡ network ¡connec$on. ¡ COMP 355 (Muppala) Multimedia 2
Media ¡API ¡ Audio/Video ¡ Playback ¡ Record ¡ MediaPlayer ¡ SoundPool ¡ MediaRecorder ¡ COMP 355 (Muppala) Multimedia 3
Media ¡Playback ¡and ¡Recording ¡ • Standard ¡method ¡to ¡manipulate ¡audio/video: ¡ – Media ¡playback ¡supported ¡through ¡the ¡MediaPlayer ¡and ¡SoundPool ¡ classes ¡ – Media ¡recording ¡supported ¡through ¡the ¡MediaRecorder ¡class ¡ – Creates ¡its ¡own ¡thread ¡for ¡processing ¡ – Requires ¡audio ¡as ¡file ¡or ¡stream ¡based ¡data ¡ • Direct ¡access ¡to ¡raw ¡audio: ¡ – AudioTrack ¡and ¡AudioRecorder ¡classes ¡ – Useful ¡to ¡manipulate ¡audio ¡in ¡memory, ¡manipula$ng ¡the ¡audio ¡buffer, ¡ or ¡any ¡other ¡usage ¡not ¡requiring ¡file ¡or ¡stream ¡data ¡ – Does ¡not ¡create ¡its ¡own ¡thread ¡ COMP 355 (Muppala) Multimedia 4
Media ¡Playback ¡ • MediaPlayer ¡is ¡designed ¡for ¡longer ¡sound ¡files ¡or ¡streams ¡ (larger ¡files) ¡ – The ¡files ¡will ¡be ¡loaded ¡from ¡disk ¡each ¡$me ¡create ¡is ¡called, ¡this ¡will ¡ save ¡on ¡memory ¡space ¡but ¡introduce ¡a ¡small ¡delay ¡(not ¡really ¡ no$ceable) ¡ • SoundPool ¡ ¡ – is ¡designed ¡for ¡short ¡clips ¡which ¡can ¡be ¡kept ¡in ¡memory ¡decompressed ¡ for ¡quick ¡access ¡ – suited ¡for ¡sound ¡effects ¡in ¡apps ¡or ¡games ¡ – loads ¡lots ¡of ¡“medium” ¡sized ¡sounds ¡into ¡the ¡memory ¡and ¡you ¡may ¡ exceed ¡your ¡limit ¡(16Mb) ¡and ¡get ¡an ¡OutOfMemoryExcep$on. ¡ COMP 355 (Muppala) Multimedia 5
MediaPlayer ¡Methods ¡ • Crea$ng ¡a ¡media ¡player: ¡ MediaPlayer ¡player ¡= ¡new ¡MediaPlayer(); ¡ • Specifying ¡the ¡source ¡of ¡the ¡media: ¡ – If ¡file ¡in ¡the ¡resource ¡directory ¡raw: ¡ player ¡= ¡MediaPlayer.create(context, ¡R.raw.music_file); ¡ – If ¡file ¡or ¡stream: ¡ player.setDataSource(path); ¡ player.prepare(); ¡ • Start ¡playback ¡ player.start(); ¡ • Pause ¡playback ¡ player.pause(); ¡ • Stop ¡playback ¡ player.stop(); ¡ player.release(); ¡ COMP 355 (Muppala) Multimedia 6
MediaPlayer ¡State ¡Diagram ¡ COMP 355 (Muppala) Multimedia 7
SoundPool ¡Methods ¡ • Crea$ng ¡a ¡media ¡player: ¡ SoundPool ¡soundPool= ¡new ¡SoundPool(2, ¡AudioManager.STREAM_MUSIC, ¡ 100); ¡ ¡ • Specifying ¡the ¡source ¡of ¡the ¡media: ¡ – If ¡file ¡in ¡the ¡resource ¡directory ¡raw: ¡ SoundPoolMap ¡soundPoolMap ¡= ¡new ¡HashMap<Integer, ¡Integer>(); ¡ ¡ ¡ soundPoolMap.put(streamID, ¡soundPool.load(this.getBaseContext(), ¡R.raw.birdsound, ¡1)); ¡ ¡ – If ¡file ¡or ¡stream: ¡ soundPool.load(String ¡path, ¡int ¡priority); ¡ • Start ¡playback ¡ – soundPool.play(streamID, ¡streamVolume, ¡streamVolume, ¡1, ¡0, ¡1f); ¡ ¡ • Pause ¡playback ¡ – soundPool.pause(streamID); ¡ • Stop ¡playback ¡ – soundPool.stop(streamID); ¡ – soundPool.unload(int ¡soundID); ¡ COMP 355 (Muppala) Multimedia 8
Video ¡Playback ¡and ¡Recording ¡ Video ¡playback ¡and ¡recording ¡also ¡uses ¡the ¡MediaPlayer ¡and ¡ • MediaRecorder ¡classes ¡with ¡similar ¡steps ¡as ¡in ¡audio ¡ Use ¡VideoView ¡widget ¡in ¡the ¡ac$vity ¡UI ¡screen ¡to ¡host ¡video: ¡ • <VideoView ¡android:id="@+id/video" ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡android:layout_width="fill_parent" ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡android:layout_height="fill_parent"> ¡ </VideoView> ¡ Get ¡a ¡handle ¡to ¡the ¡video ¡view ¡in ¡your ¡code: ¡ • • ¡ video View ¡= ¡( Video View) ¡this.findViewById(R.id.video); ¡ Set ¡the ¡path ¡to ¡the ¡video ¡file: ¡ • • video View.set Video URI(Uri.parse(“\sdcard\ video .mp4”)); ¡ Set ¡the ¡focus: ¡ • • video View.setFocus(); ¡ You ¡can ¡use ¡a ¡MediaController ¡to ¡control ¡the ¡video ¡ • • MediaController ¡mc ¡= ¡new ¡MediaController(this); ¡ • video View.setMediaController(mc); ¡ COMP 355 (Muppala) Multimedia 9
MediaRecorder ¡Methods ¡ • Create ¡a ¡new ¡instance ¡of ¡Media ¡recorder: ¡ MediaRecorder ¡recorder ¡= ¡new ¡MediaRecorder(); ¡ – • Set ¡the ¡audio ¡source: ¡ recorder.setAudioSource(MediaRecorder.AudioSource.MIC); ¡ – • Set ¡ ¡output ¡file ¡format: ¡ recorder.setOutputFileFormat(MediaRecorder.OutputFormat.THREE_GPP); ¡ – • Set ¡output ¡file ¡name: ¡ recorder.setOutputFile(PATH); ¡ – • Set ¡the ¡audio ¡encoder: ¡ recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); ¡ – • Prepare ¡the ¡media ¡recorder: ¡ recorder.prepare(); ¡ – • Start ¡capture ¡ recorder.start(); ¡ – • Stop ¡capture ¡ recorder.stop(); ¡ – • Finish ¡recording ¡ recorder.release(); ¡ – COMP 355 (Muppala) Multimedia 10
MediaPlayer ¡and ¡MediaRecorder ¡ • Rich ¡API ¡designed ¡for ¡long ¡playing ¡media ¡streams, ¡such ¡as ¡ voice ¡audio ¡recordings, ¡music ¡and ¡videos ¡ – seeking ¡opera$ons ¡supported ¡ – Source ¡buffering ¡ • Heavyweight ¡resource-‑wise ¡ ¡ • Slow ¡to ¡ini$alize ¡ • Not ¡suitable ¡for ¡low-‑latency ¡scenarios ¡like ¡playing ¡short ¡audio ¡ samples ¡for ¡sound ¡effects, ¡such ¡as ¡in ¡games. ¡ • Designed ¡for ¡situa$ons ¡with ¡no ¡more ¡than ¡one ¡or ¡two ¡ MediaPlayers ¡working ¡at ¡the ¡same ¡$me ¡ COMP 355 (Muppala) Multimedia 11
SoundPool ¡Class ¡ • The ¡SoundPool ¡class ¡manages ¡and ¡plays ¡audio ¡resources ¡for ¡ applica$ons. ¡ • A ¡SoundPool ¡is ¡a ¡collec$on ¡of ¡samples ¡that ¡can ¡be ¡loaded ¡into ¡ memory ¡from ¡a ¡resource ¡inside ¡the ¡APK ¡or ¡from ¡a ¡file ¡in ¡the ¡file ¡ system ¡ • The ¡SoundPool ¡library ¡uses ¡the ¡MediaPlayer ¡service ¡to ¡decode ¡the ¡ audio ¡into ¡a ¡raw ¡16-‑bit ¡PCM ¡mono ¡or ¡stereo ¡stream ¡ • This ¡allows ¡applica$ons ¡to ¡ship ¡with ¡compressed ¡streams ¡without ¡ having ¡to ¡suffer ¡the ¡CPU ¡load ¡and ¡latency ¡of ¡decompressing ¡during ¡ playback ¡ • Typical ¡usage ¡scenario ¡includes ¡games ¡with ¡sound ¡where ¡several ¡ sounds ¡are ¡used ¡in ¡a ¡level ¡and ¡may ¡have ¡to ¡be ¡played ¡with ¡overlap ¡ some$mes ¡ COMP 355 (Muppala) Multimedia 12
SoundPool ¡Class ¡Features ¡ • Senng ¡the ¡maximum ¡number ¡of ¡sounds ¡to ¡play ¡at ¡the ¡same ¡ $me ¡ • Priori$zing ¡the ¡sounds ¡so ¡that ¡the ¡low-‑priority ¡ones ¡will ¡be ¡ dropped ¡when ¡the ¡maximum ¡threshold ¡is ¡reached ¡ • Pausing ¡and ¡stopping ¡sounds ¡before ¡they ¡finish ¡playing ¡ • Looping ¡sounds ¡ • Changing ¡the ¡playback ¡rate ¡(effec$vely, ¡the ¡pitch ¡of ¡each ¡ sound) ¡ • Senng ¡stereo ¡volume ¡(separate ¡for ¡lep ¡and ¡right ¡channels) ¡ COMP 355 (Muppala) Multimedia 13
Recommend
More recommend