Mul$media Techniques in Android Some of the informa$on in - - PowerPoint PPT Presentation

mul media techniques in android
SMART_READER_LITE
LIVE PREVIEW

Mul$media Techniques in Android Some of the informa$on in - - PowerPoint PPT Presentation

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


slide-1
SLIDE 1

Mul$media ¡Techniques ¡ in ¡Android ¡

Some ¡of ¡the ¡informa$on ¡in ¡this ¡sec$on ¡ is ¡adapted ¡from ¡WiseAndroid.com ¡

slide-2
SLIDE 2

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

slide-3
SLIDE 3

Media ¡API ¡

COMP 355 (Muppala) Multimedia 3

Audio/Video ¡ Playback ¡ Record ¡ MediaPlayer ¡ SoundPool ¡ MediaRecorder ¡

slide-4
SLIDE 4

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, ¡

  • r ¡any ¡other ¡usage ¡not ¡requiring ¡file ¡or ¡stream ¡data ¡

– Does ¡not ¡create ¡its ¡own ¡thread ¡

COMP 355 (Muppala) Multimedia 4

slide-5
SLIDE 5

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

slide-6
SLIDE 6

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

slide-7
SLIDE 7

MediaPlayer ¡State ¡Diagram ¡

COMP 355 (Muppala) Multimedia 7

slide-8
SLIDE 8

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

slide-9
SLIDE 9

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: ¡
  • ¡videoView ¡= ¡(VideoView) ¡this.findViewById(R.id.video); ¡
  • Set ¡the ¡path ¡to ¡the ¡video ¡file: ¡
  • videoView.setVideoURI(Uri.parse(“\sdcard\video.mp4”)); ¡
  • Set ¡the ¡focus: ¡
  • videoView.setFocus(); ¡
  • You ¡can ¡use ¡a ¡MediaController ¡to ¡control ¡the ¡video ¡
  • MediaController ¡mc ¡= ¡new ¡MediaController(this); ¡
  • videoView.setMediaController(mc); ¡

COMP 355 (Muppala) Multimedia 9

slide-10
SLIDE 10

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

slide-11
SLIDE 11

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

slide-12
SLIDE 12

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

slide-13
SLIDE 13

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

slide-14
SLIDE 14

AudioTrack ¡Class ¡

  • The ¡AudioTrack ¡class ¡manages ¡and ¡plays ¡a ¡single ¡audio ¡resource ¡for ¡Java ¡

applica$ons ¡

  • It ¡allows ¡to ¡stream ¡PCM ¡audio ¡buffers ¡to ¡the ¡audio ¡hardware ¡for ¡playback. ¡

This ¡is ¡achieved ¡by ¡"pushing" ¡the ¡data ¡to ¡the ¡AudioTrack ¡object ¡one ¡of ¡the ¡ write(byte[], ¡int, ¡int) ¡and ¡write(short[], ¡int, ¡int) ¡methods. ¡

  • An ¡AudioTrack ¡instance ¡can ¡operate ¡under ¡two ¡modes: ¡sta$c ¡or ¡
  • streaming. ¡
  • In ¡Streaming ¡mode, ¡the ¡applica$on ¡writes ¡a ¡con$nuous ¡stream ¡of ¡data ¡to ¡

the ¡AudioTrack, ¡using ¡one ¡of ¡the ¡write() ¡methods. ¡ ¡

  • The ¡streaming ¡mode ¡is ¡most ¡useful ¡when ¡playing ¡blocks ¡of ¡audio ¡data ¡that ¡

for ¡instance ¡are: ¡

– too ¡big ¡to ¡fit ¡in ¡memory ¡because ¡of ¡the ¡dura$on ¡of ¡the ¡sound ¡to ¡play, ¡ – too ¡big ¡to ¡fit ¡in ¡memory ¡because ¡of ¡the ¡characteris$cs ¡of ¡the ¡audio ¡data ¡(high ¡ sampling ¡rate, ¡bits ¡per ¡sample ¡...) ¡ – received ¡or ¡generated ¡while ¡previously ¡queued ¡audio ¡is ¡playing. ¡

COMP 355 (Muppala) Multimedia 14

slide-15
SLIDE 15

AudioTrack ¡Class ¡

  • The ¡sta$c ¡mode ¡is ¡to ¡be ¡chosen ¡when ¡dealing ¡with ¡short ¡sounds ¡that ¡fit ¡in ¡

memory ¡and ¡that ¡need ¡to ¡be ¡played ¡with ¡the ¡smallest ¡latency ¡possible ¡

  • AudioTrack ¡instances ¡in ¡sta$c ¡mode ¡can ¡play ¡the ¡sound ¡without ¡the ¡need ¡

to ¡transfer ¡the ¡audio ¡data ¡from ¡Java ¡to ¡na$ve ¡layer ¡each ¡$me ¡the ¡sound ¡is ¡ to ¡be ¡played ¡

  • The ¡sta$c ¡mode ¡will ¡therefore ¡be ¡preferred ¡for ¡UI ¡and ¡game ¡sounds ¡that ¡

are ¡played ¡open, ¡and ¡with ¡the ¡smallest ¡overhead ¡possible. ¡

  • Upon ¡crea$on, ¡an ¡AudioTrack ¡object ¡ini$alizes ¡its ¡associated ¡audio ¡buffer ¡
  • The ¡size ¡of ¡this ¡buffer, ¡specified ¡during ¡the ¡construc$on, ¡determines ¡how ¡

long ¡an ¡AudioTrack ¡can ¡play ¡before ¡running ¡out ¡of ¡data ¡

  • For ¡an ¡AudioTrack ¡using ¡the ¡sta$c ¡mode, ¡this ¡size ¡is ¡the ¡maximum ¡size ¡of ¡

the ¡sound ¡that ¡can ¡be ¡played ¡from ¡it ¡

  • For ¡the ¡streaming ¡mode, ¡data ¡will ¡be ¡writen ¡to ¡the ¡hardware ¡in ¡chunks ¡of ¡

sizes ¡inferior ¡to ¡the ¡total ¡buffer ¡size. ¡

COMP 355 (Muppala) Multimedia 15

slide-16
SLIDE 16

AudioTrack ¡Class ¡

  • AudioTrack ¡class ¡allows ¡us ¡the ¡flexibility ¡of: ¡

– Decoding ¡audio ¡from ¡any ¡format ¡that ¡is ¡not ¡supported ¡by ¡the ¡plavorm ¡ – Modifying ¡or ¡enhancing ¡audio ¡on ¡the ¡fly ¡(such ¡as ¡applying ¡distor$on, ¡ vocoder, ¡reverb ¡effects ¡– ¡but ¡you ¡have ¡to ¡code ¡them ¡yourself!) ¡ – Loading ¡audio ¡from ¡custom ¡sources ¡to ¡play ¡it ¡on ¡the ¡fly ¡(but ¡you ¡have ¡ to ¡deal ¡with ¡buffering ¡and ¡stability ¡yourself ¡– ¡be ¡sure ¡not ¡to ¡develop ¡ another ¡MediaPlayer!) ¡

  • The ¡price ¡is ¡that ¡you ¡are ¡on ¡your ¡own ¡regarding ¡buffering, ¡

latency ¡and ¡correctness ¡of ¡the ¡sound ¡you ¡produce ¡with ¡

  • AudioTrack. ¡

COMP 355 (Muppala) Multimedia 16

slide-17
SLIDE 17

Android ¡Audio ¡Comparison ¡

Audio ¡Requirements ¡ Audio ¡Class ¡Choice ¡ Require ¡low ¡latency, ¡such ¡as ¡in ¡games ¡or ¡sound ¡ effects ¡ SoundPool/ ¡AudioTrack ¡(for ¡more ¡flexibility) ¡ Need ¡to ¡play ¡video ¡that ¡has ¡an ¡audio ¡track ¡ MediaPlayer ¡ Play ¡a ¡set ¡of ¡short ¡sounds ¡many ¡$mes ¡ SoundPool ¡ Stream ¡audio ¡from ¡an ¡external ¡source, ¡e.g. ¡ HTTP ¡or ¡TCP ¡stream ¡ MediaPlayer/ ¡AudioTrack ¡(if ¡MediaPlayer ¡not ¡ suitable) ¡ Generate ¡audio ¡from ¡scratch, ¡such ¡as ¡by ¡using ¡ math ¡formulas ¡/ ¡frequency ¡modula$on ¡ AudioTrack ¡ Play ¡background ¡music ¡ MediaPlayer ¡ Modify ¡the ¡audio ¡on ¡the ¡fly ¡ AudioTrack ¡

COMP 355 (Muppala) Multimedia 17