Stagefright (6) - Audio Playback的流程

转载 2011年01月10日 09:40:00

到目前為止,我們都只著重在video處理的部分,對於 audio卻隻字未提。這篇文章將會開始audio處理的流程。

Stagefright中關於audio的部分是交由 AudioPlayer來處理,它是在AwesomePlayer::play_l中被建立的。


(1) 當上層應用程式要求播放影音時,AudioPlayer同時被建立出來,並且被啟動

status_t AwesomePlayer::play_l()
{
  ...

  mAudioPlayer = new AudioPlayer(mAudioSink, ...);
  mAudioPlayer->start(...);

  ...
}



(2) AudioPlayer在啟動的過程中會先去讀取第一筆解碼後的資料,並且開啟audio output

status_t AudioPlayer::start(...)
{
  mSource->read(&mFirstBuffer);

  if (mAudioSink.get() != NULL)
  {
    mAudioSink->open(..., &AudioPlayer::AudioSinkCallback, ...);
    mAudioSink->start();
  }
  else
  {
    mAudioTrack = new AudioTrack(..., &AudioPlayer::AudioCallback, ...);
    mAudioTrack->start();
  }
}


從 AudioPlayer::start的程式碼來看,AudioPlayer似乎並沒有將mFirstBuffer傳給audio output。


(3) 開啟audio output的同時,AudioPlayer會將callback函式設給它,之後每當callback函式被呼叫,AudioPlayer便去 audio decoder讀取解碼後的資料

size_t AudioPlayer::AudioSinkCallback(audioSink, buffer, size, ...)
{
  return fillBuffer(buffer, size);
}

void AudioPlayer::AudioCallback(..., info)
{
  buffer = info;
  fillBuffer(buffer->raw, buffer->size);

}

size_t AudioPlayer::fillBuffer(data, size)
{
  mSource->read(&mInputBuffer, ...);
  memcpy(data, mInputBuffer->data(), ...);
}


解碼後audio資料的讀取就是由callback函式所驅動,但是callback函式又 是怎麼由audio output去驅動的,目前從程式碼上還看不出來。另外一方面,從上面的程式片段可以看出,fillBuffer將資料(mInputBuffer)複製 到data之後,audio output應該會去取用data。


(5) 至於audio decoder的工作流程則和video decoder相同,可參閱《Stagefright (4) - Video Buffer傳輸流程

StageFright框架(六)Audio Playback的流程

到目前為止,我們都只著重在video處理的部分,對於audio卻隻字未提。這篇文章將會開始audio處理的流程。 Stagefright中關於audio的部分是交由AudioPlayer來處理,...

stagefright框架(六)-Audio Playback的流程

到目前為止,我們都只著重在video處理的部分,對於audio卻隻字未提。這篇文章將會開始audio處理的流程。Stagefright中關於audio的部分是交由AudioPlayer來處理,它是在A...
  • anyshu1
  • anyshu1
  • 2011年03月31日 10:29
  • 256

StageFright_Video Playback的流程

  • 2011年02月09日 14:09
  • 315KB
  • 下载

Stagefright 之 Video Playback的流程

Stagefright之一                                                                  ——Video Playback的流程 ...
  • ayuppie
  • ayuppie
  • 2013年03月13日 14:06
  • 1193

stagefright框架(一)Video Playback的流程

stagefright框架(一)Video Playback的流程     在Android上,預設的多媒體框架(multimedia frame...

Stagefright (1) - Video Playback的流程

在Android上,預設的多媒體框架 (multimedia framework)是OpenCORE。OpenCORE的優點是兼顧了跨平台的移植性,而且已經過多方驗證,所以相當穩定;但是其缺點是...

StageFright框架(一)Video Playback的流程

在Android上,預設的多媒體框架(multimedia framework)是OpenCORE。OpenCORE的優點是兼顧了跨平台的移植性,而且已經過多方驗證,所以相對來說較為穩定;但是其缺點是...

stagefright框架解读(—)音视频Playback流程

从Android 2.0,Google引进了Stagefright,并在android2.3时用Stagefright在Android中是以shared library的形式存在(libstagefr...

Stagefright Playback -- 精简版(个人整理)

注:本文主要参考了“stagefright框架(X)”系列的几篇文章,并基于Android 4.0.3源代码结合自己的理解整理而成。由于是精简版本,故未贴上相关源代码,请谅解。 1  Stagefr...

图文版stagefright Arch 01 -- AwesomePlayer playback flow

这个版本的stagefright讲述比较清晰明了,图片比较直观,opencore近期好像已经不用了,改成stagefright和nuplayer了。原出处地址:http://blog.sina.com...
  • denisyq
  • denisyq
  • 2012年07月10日 13:59
  • 739
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Stagefright (6) - Audio Playback的流程
举报原因:
原因补充:

(最多只允许输入30个字)