The following figure shows the architecture of Android audio.
The detailed call path is as follows:
1. Audio Playback
Sample Code
Mediaplayer MP = new mediaplayer ();
MP. setdatasource (path_to_file );
MP. Prepare ();
MP. Start ();
1.1 mediaplayer MP = new mediaplayer ()
The implementation process is as follows:
Function Name |
File Name |
Mediaplayer: mediaplayer |
Mediaplayer. Java |
Mediaplayer: native_setup |
Mediaplayer. Java |
Android_media_mediaplayer_native_setup |
Android_media_mediaplayer.cpp |
Mediaplayer: mediaplayer |
Mediaplayer. cpp |
1.2 MP. setdatasource (path_to_file );
The implementation process is as follows:
Function Name |
File Name |
Mediaplayer: setdatasource |
Mediaplayer. Java |
Android_media_mediaplayer_setdatasource |
Android_media_mediaplayer.cpp |
Mediaplayer: setdatasource |
Mediaplayer. cpp |
-Mediaplayer: getmediaplayerservice |
Mediaplayer. cpp |
-Imediaplayerservice |
Imediaplayerservice. h |
-Imediaplayerservice: Create |
Mediaplayer. cpp |
-- Mediaplayerservice: Create |
Mediaplayerservice. cpp |
-Imediaplayer: setdatasource |
Mediaplayer. cpp |
-- Bpmediaplayer: setdatasource |
Imediaplayer. cpp |
-- Mediaplayerservice: Client: setdatasource (the actual operation is executed) |
Mediaplayerservice. cpp |
-- Android: createplayer |
Mediaplayerservice. cpp |
-- New stagefrightplayer |
Mediaplayerservice. cpp |
-- New audiooutput |
Mediaplayerservice. cpp |
-- Stagefrightplayer: setdatasource |
Stagefrightplayer. cpp |
-- Awesomeplayer: setdatasource |
Awesomeplayer. cpp |
-- Awesomeplayer: setperformance_l |
Awesomeplayer. cpp |
1.3 MP. Prepare ()
Function Name |
File Name |
Mediaplayer: Prepare |
Mediaplayer. Java |
Android_media_mediaplayer_prepare |
Android_media_mediaplayer.cpp |
Mediaplayer: Prepare |
Mediaplayer. cpp |
Midifile: Prepare |
Midifile. cpp |
Vorbisplayer: Prepare |
Vorbisplayer. cpp |
Vorbisplayer: createoutputtrack |
Vorbisplayer. cpp |
Audiooutput: Open |
Mediaplayerservice. cpp |
Audiotrack: audiotrack |
Audiotrack. cpp |
Audiosystem: get_audio_flinger |
Audiosystem. cpp |
Audioflinger: createtrack |
Audioflinger. cpp |
|
|
|
|
1.4 MP. Start ()
Function Name |
File Name |
Mediaplayer: Start |
Mediaplayer. Java |
Android_media_mediaplayer_start |
Android_media_mediaplayer.cpp |
Mediaplayer: Start |
Mediaplayer. cpp |
Pvplayer: Start |
Pvplayer. h |
Midifile: Start |
Midifile. cpp |
Vorbisplayer: Start |
Vorbisplayer. cpp |
Audiotrack: Start |
Audiotrack. cpp |
Mediaplayerservice: mediaplayerservice (mediaplayerservice. cpp) is created by the systemserver process. The system_init () function in the system_init.cpp file calls mediaplayerservice: instantiate to create
Getplayertype (mediaplayerservice. cpp) returns three types of player:
1) pv_player: play MP3
2) sonivox_player: play MIDI
3) vorbis_player: Play Ogg,
To put it simply, the playback process is as follows:
When the Java end initiates a call, mediaplayer will go to mediaplayerservice, and then call the corresponding decoding tool to decode and create audiotrack. All audiotracks to be output are merged in audioflinger: audiomixer, then, use audiohal (actual real-time player of audiohardwareinterface) to transmit it to the actual hardware for playing.