檢查MediaPlayer
的源代碼(link),該start()
方法是這樣的:Android的MediaPlayer如何通過檢查本機代碼來工作?
public void start() throws IllegalStateException {
stayAwake(true);
_start();
}
而且_start()
方法是這樣的:
private native void _start() throws IllegalStateException;
檢查本地_start()
方法(link)(稱爲start()
但是因爲原生電話不應叫_start()
被命名爲_start()
?):
status_t MediaPlayer::start()
{
ALOGV("start");
Mutex::Autolock _l(mLock);
if (mCurrentState & MEDIA_PLAYER_STARTED)
return NO_ERROR;
if ((mPlayer != 0) && (mCurrentState & (MEDIA_PLAYER_PREPARED |
MEDIA_PLAYER_PLAYBACK_COMPLETE | MEDIA_PLAYER_PAUSED))) {
mPlayer->setLooping(mLoop);
mPlayer->setVolume(mLeftVolume, mRightVolume);
mPlayer->setAuxEffectSendLevel(mSendLevel);
mCurrentState = MEDIA_PLAYER_STARTED;
status_t ret = mPlayer->start();
if (ret != NO_ERROR) {
mCurrentState = MEDIA_PLAYER_STATE_ERROR;
} else {
if (mCurrentState == MEDIA_PLAYER_PLAYBACK_COMPLETE) {
ALOGV("playback completed immediately following start()");
}
}
return ret;
}
ALOGE("start called in state %d", mCurrentState);
return INVALID_OPERATION;
}
數據在哪裏讀取?我想檢查Android如何與RTSP協同工作,但我無法找到它加載數據的位置。我想知道它是否使用像FFMpeg這樣的庫或其他實現。編輯:
爲什麼這段代碼必須使用JNI?
我選擇這個作爲答案,因爲它是最詳細和徹底的書面。 –