Multimedia
Audio and Video
Audio
-
Android support lots of common audio format
-
MPEG-4 (.mp4, .m4a)
-
MP3 (.mp3)
-
Ogg (.ogg)
-
WAVE (.wav)
-
Matroska (.mkv)
Vedio
-
H264
3GPP (.3gp)
MPEG-4 (.mp4)
-
H265
MPEG-4 (.mp4) -
VP8
-
VP9
WebM (.webm)
MediaPlayer
-
MediaPlayer class can be used to control playback of audio/video files and streams.
MediaPlayer
-
MediaPlayer class can be used to control playback of audio/video files and streams.
MediaPlayer
-
Idle
-
Initialized
-
Preparing
-
Prepared
-
Started
-
Paused
-
Playback Completed
-
Stopped
-
End
MediaPlayer(Audio)
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.example);
mediaPlayer.setDataSource(uri);
// the uri can be system file or by http, rtsp protocal
mediaPlayer.prepare();
mediaPlayer.start();
mediaPlayer.pause();
mediaPlayer.start();
mediaPlayer.stop();
mediaPlayer.reset();
// If going to stop stage, must reset to go to preparing
mediaPlayer.release();
MediaPlayer(Vedio)
-
Most same as play audio
-
Need a SurfaceView to show video
MediaPlayer mp = MediaPlayer.create(this, R.raw.ex);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
// holder is a class to deal with screen
mp.setDisplay(surfaceHolder);
Advance-Audio
-
AudioTrack provides a much more direct method of playing audio
-
Can control the PCM code
-
frequence, channel, samplebit
AudioTrack
-
Mode
-
static
-
streaming
AudioTrack
// AudioTrack(int streamType, int sampleRateInHz,
// int channelConfig, int audioFormat,
// int bufferSizeInBytes, int mode)
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
frequency,
Channel,
SampBit,
minBufSize,
AudioTrack.MODE_STREAM);
Advance-Video
-
VideoView is subclass of serfaceView
-
Can use mediaController directly
Advance-Video
// create the view (in this case it is already included in the layout resource)
VideoView videoview = (VideoView) findViewById(R.id.videoview);
videoview.setKeepScreenOn(true);
// used if streaming
if (videouri != null) videoview.setVideoURI(videouri);
// absolute path if it is a file
else videoview.setVideoPath(videopath);
// let's add a media control so we can control the playback
mediacontroller = new MediaController(this);
mediacontroller.setAnchorView(videoview);
videoview.setMediaController(mediacontroller);
if (videoview.canSeekForward())
videoview.seekTo(videoview.getDuration()/2);
// start the playback
Media recoding
<uses-permission android:name="android.permission.RECORD_VIDEO"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
Audio Recording
-
MediaRecorder
-
AudioRecorder
MediaRecorder
// initialize the MediaRecorder
MediaRecorder mediarecorder = new MediaRecorder();
// configure the data source
// the source of the audio input
mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// output format
mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
// encoding
mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
// use absolute path to file where output is stored
mediarecorder.setOutputFile("/sdcard/audiorecordexample.3gpp");
// prepare to record
mediarecorder.prepare();
Then when the recoding needs to
mediarecorder.start();
mediarecorder.pause();
mediarecorder.start();
mediarecorder.stop();
mediarecorder.release();
AudioRecorder
short[] buffer = new short[10000];
recorder = new AudioRecord( // source to record from
MediaRecorder.AudioSource.MIC,
11025,
// channel config—mono, stereo, etc.
AudioFormat.CHANNEL_CONFIGURATION_MONO,
// audio encoding
AudioFormat.ENCODING_PCM_16BIT,
// buffer size
buffer.length
);
recorder.startRecording();
while(recordablestate) {
try {
// read in up to buffer size
int readBytes = recorder.read(buffer, 0, buffer.length);
// do something with the bytes that are read
} catch (Exception t) {
recordablestate = false;
}
}
Video Recording
-
MediaRecorder only
Video Recording
// initialize
MediaRecorder mediarecorder = new MediaRecorder();
// set data source
mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
mediarecorder.setOutputFile("/sdcard/someexamplevideo.mp4");
// provide a surface to show the preview in. in this case a VideoView
is used
videoview = (VideoView) findViewById(R.id.videosurface);
SurfaceHolder holder = videoview.getHolder();
mediarecorder.setPreviewDisplay(holder.getSurface());
// prepare
mediarecorder.prepare();
// start recording
mediarecorder.start();
MediaStore
-
MediaStore is a content provider to provide media source
-
Android will scan the media file to MediaStore when umount or mount sdcard
-
However when we record something, we need to add MediaStore that can be used by other application
MediaStore
ContentValues content = new ContentValues();
// VERY IMPORTANT! Must reference the absolute path of the data.
content.put(MediaStore.MediaColumns.DATA, "/sdcard/AudioExample.3gpp");
content.put(MediaStore.MediaColumns.TITLE, "AudioRecordExample");
content.put(MediaStore.MediaColumns.MIME_TYPE, "audio/amr");
content.put(MediaStore.Audio.Media.ARTIST, "Me");
content.put(MediaStore.Audio.Media.IS_MUSIC, true);
// get the Content Resolver
ContentResolver resolve = getContentResolver();
// insert into the content resolver
Uri uri = resolve.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, content);
// announce to everyone that cares that it was inserted
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
SwipeRefreshLayout
-
A Layout that can display refresh animation
SwipeRefreshLayout
-
Xml
add SwipeFreshLayout to xml source -
java code
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { // dosomething swipeRefreshLayout.setRefreshing(false); } });
FloatingActionButton
-
More cool than old button
MultiMedia
By zlsh80826
MultiMedia
- 519