Android default media player - android

I want to know how a default media player works.Like how it scans all songs in sd card,how it displays them,so overall entire working on default media player.
I want this information so that I can compare it with my custom media player and check how fast my media player is working as compared to default one.I have tried searching internet but was not able to find some relevant information related to this.

Your question is very broad in perspective and hence, I will refer you to corresponding paths to get an understanding of the overall system.
First, the overall processing of media files starts from the Gallery application. Though not the entry point, ImageCacheRequest could be a good reference point to start the study, which shows how a cached image is read and rendered onto the screen.
Next, to understand how this thumbnail is generated, you will have to refer to ThumbnailManager.java which is invoked from camera, mms etc.
Thumbnail class internally employs MediaMetadataRetriever which is the main class for retrieving the thumbnail data.
MediaMetadataRetriever has a corresponding JNI implementation as shown here. The main function of interest is getFrameAtTime.
The most common implementation is StagefrightMetadataRetriever, which works on a simple principle. First, a MediaExtractor i.e. a parser is created which will sniff out the media-file type and create a corresponding parser entity as shown here. Next, the parser will then invoke a codec to decode the corresponding key frame at the requested time stamp and provide the image back as can be observed in extractVideoFramewithFlags.
Inside this function, a codec is created, frame is decoded, color converted and returned back to the caller which will transfer the same to the higher application.
In a nutshell, I feel your player will not come into picture and as long as the corresponding parsers and codecs are registered with the system, the thumbnails will be generated .

I want to know how a default media player works
There are dozens of "default media player" applications, as different Android devices ship with different "media player" applications, frequently written by their device manufacturers.
You are welcome to take a look at the implementation of the AOSP Music app, and there may be other open source media players that you can examine as well.

Related

In android, how to implement 'Multi-track Audio Support' using Chromecast?

I need to implement Multi-track Audio Support feature in Sender application. Means, When user casts any video/movie on TV using Chromecast, then on sender application, user should be able to see all available audio tracks and choose desired audio track to cast on TV.
In Developers website, I saw Tracks API, in that MediaTrack object, which can be used to configure a track.
https://developers.google.com/cast/docs/android_sender#tracks
Here, I am not getting, how to fetch all available audio tracks from selected mp4 file? Can anyone provide the direction to work with this?
what will be the role of receiver application, regarding this?
I looked at given reference sample app. From that app, I am clear of how to set MediaTracks.
https://github.com/googlecast/CastVideos-android
I am not getting how to extract audio tracks from mp4 file, so that we can set them as MediaTracks?
Is this part needs to be done in receiver app?
Any help will be highly appreciated.
Thanks.
Currently, in the Cast SDK, there is no support for multiple embedded audio tracks in an mp4 file

Need QMediaPlayer to play mp3 data in memory

I guess small audio clips are necessary for many applications, thus I would expect QT have support playing mp3 in memory slices. Maybe decode mp3 data to wav data in memory may be one solution, but that needs time to decode all data first. For real time application, it is not a good idea. It also doesn't make sense to store mp3_data in a file and ask QMediaPlayer to play that, the performance is unacceptable.
This is my code after many searches by google, including stackoverflow:
m_buffer.setBuffer(&mp3_data_in_memory);
m_player.setMedia(QMediaContent(), &m_buffer);
m_player.play();
where m_buffer is a QBuffer instance, and mp3_data_in_memory is a QByteArray one; m_player is a QMediaPlayer instance.
I got some information that the code here doesn't work in MacOS and iOS, but I am running on Android now.
Does anyone have a solution for Android system? Thanks a lot.
Your code won't work because the media property requires a valid QMediaContent instance:
Setting this property to a null QMediaContent will cause the player to
discard all information relating to the current media source and to
cease all I/O operations related to that media.
There's also no way of telling the QMediaPlayer what format the data is in, you're just dumping raw data on it. In principle QMediaResource can hold this information, but it requires a url and is regarded as null without it.
As you may have guessed, QMediaPlayer and the related classes are high-level constructs not designed for this sort of thing. You need to use a QAudioDecoder to actually decode the raw data, and pipe the output to a QAudioOutput to hear it.

How to display preview thumbnail while scrubbing the video.

I am trying to display the preview thumbnail when user move his finger over video scrubber.
The only solution I m finding is to extract thumbnails using some 3rd party tool and save it to server or pass it to app via some JSON.
What I m trying to do is something similar to JwPlayer (http://jwplayer.electroteque.org/controls-preview)
Any idea where to start?
Or is here any standard protocol that support manual generated thumbnails? Or i need to go with my own feed format.
I don't quite know what the configuration of your project is, but one possibility is too actually instantiate a mini player and display the progress of the video as the user the slides. So essentially this "mini player" would appear when the user begins drag, and skip to whatever time is specified, and pause. It is similar to a project I am working on now. This is a great reference as well: http://www.autodeskresearch.com/pdf/p1159-matejka.pdf. This technique is much different then the one I suggested, but is another alternative depending on your scenario.

Android: Can I get the OS's last played audio/video or viewed image from inside my application?

Android developers,
I would like to know if it is possible to get, from inside my application, a reference to the last played media (audio or video) or viewed image.
I tried to get a list of MediaPlayer, but all I can get is the MediaPlayer from my own application context, not from the other applications. I could also get the current state for the MediaPlayer (if a file is playing or not), but thas all.
Is this possible?
thanks and regards
I don't think it is possible. For security reasons, an app cannot just view another app's data and there is no global 'recents' list (as in windows).

Low-level audio API for Android

I'm looking for some way in Android to play in-memory audio in a manner analogous to the waveOutOpen family of methods in Windows programming.
The waveOut... methods essentially let an application create arrays of sample values (like in-memory WAV files without the headers) and dump them into a queue for sequential playback. Windows transitions seamlessly from one array to the next, so as long as the application keeps dumping arrays into the queue ahead of playback, the program can create and play continuous audio of any arbitrary length. The Windows API also incorporates a callback mechanism that the application can use to indicate progress and load additional buffers.
As far as I can tell, the Android audio API lets an application play a file from local storage or a URL, or from a memory stream. Is there any way to get Android to "queue up" MediaPlayer.start() calls so that one player transitions (without glitches) into the next upon play completion? It appears that Jet does something like this, but only with its own internal synthesis engine.
Is there any other way of accessing Android audio in a waveOutOpen way?
android.media.AudioTrack
... is the class you are probably looking for.
http://developer.android.com/reference/android/media/AudioTrack.html#AudioTrack%28int,%20int,%20int,%20int,%20int,%20int%29
After creating it you simply feed it with binary data with given format using following method:
AudioTrack.writeTo(...)

Categories

Resources