Android 学习使用 SurfaceView 和 MediaPlayer 播放视频

记录下自己学习用的demo , 具体分析后续补上。

package lah.surfaceviewdemo;import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.TimedMetaData;
import android.media.TimedText;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.LinearLayout;import java.io.IOException;public class MainActivity extends Activity implements View.OnClickListener {private Context mContext;private LinearLayout mLinearLayout;private Button bt_play, bt_pause, btn_mute, btn_unmute, btn_notify, btn_size;private SurfaceView mSurfaceView;private SurfaceHolder mHolder;private MediaPlayer mPlayer;private int windowWidth;private int windowHeight;private int videoWith;private int videoHeight;private int notification_id = 1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mContext = this;//获取屏幕宽高WindowManager windowManager = this.getWindowManager();windowWidth = windowManager.getDefaultDisplay().getWidth();windowHeight = windowManager.getDefaultDisplay().getHeight();//获取屏幕宽高DisplayMetrics dm = getResources().getDisplayMetrics();Log.d("luoanhao", "[MainActivity.java] -- onCreate -- windowWidth:" + windowWidth);Log.d("luoanhao", "[MainActivity.java] -- onCreate -- windowHeight:" + windowHeight);Log.d("luoanhao", "[MainActivity.java] -- onCreate -- dm.heightPixels:" + dm.heightPixels);Log.d("luoanhao", "[MainActivity.java] -- onCreate -- dm.widthPixels:" + dm.widthPixels);initView();initPlayer();}private void initView() {mLinearLayout = (LinearLayout) findViewById(R.id.linearlayout_control);bt_play = (Button) findViewById(R.id.btn_play);bt_play.setOnClickListener(this);bt_pause = (Button) findViewById(R.id.btn_pause);bt_pause.setOnClickListener(this);btn_mute = (Button) findViewById(R.id.btn_mute);btn_mute.setOnClickListener(this);btn_unmute = (Button) findViewById(R.id.btn_unmute);btn_unmute.setOnClickListener(this);btn_notify = (Button) findViewById(R.id.btn_notify);btn_notify.setOnClickListener(this);btn_size = findViewById(R.id.btn_change_size);btn_size.setOnClickListener(this);mSurfaceView = (SurfaceView) findViewById(R.id.surfaceview);mHolder = mSurfaceView.getHolder();mHolder.addCallback(new LahCallBack());}private void initPlayer() {mPlayer = new MediaPlayer();try {String uri = "android.resource://" + getPackageName() + "/" + R.raw.picture_setting_video;//String uri = "android.resource://" + getPackageName() + "/" + R.raw.video_test;//String uri = "https://waptest.chaojijiuxing.cn/ad?id=null";mPlayer.setDataSource(this, Uri.parse(uri));//            File file = new File("mnt/usb/sda1/aaa_video/DCs.Legends.of.Tomorrow.arabic-ANSI.mkv");
//            if (file != null && file.exists()) {
//                mPlayer.setDataSource(file.toString());
//            }mPlayer.prepareAsync();videoWith = mPlayer.getVideoWidth();videoHeight = mPlayer.getVideoWidth();Log.d("luoanhao", "[MainActivity.java] -- initPlayer -- videoWith:" + videoWith);Log.d("luoanhao", "[MainActivity.java] -- initPlayer -- videoHeight:" + videoHeight);mPlayer.start();} catch (IOException e) {e.printStackTrace();}mPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {@Overridepublic void onBufferingUpdate(MediaPlayer mp, int percent) {Log.d("luoanhao", "[MainActivity.java] -- onBufferingUpdate -- ");}});mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mp) {mPlayer.start();testTract();Log.d("luoanhao", "[MainActivity.java] -- onPrepared -- mPlayer.start()");}});mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {Log.d("luoanhao", "[MainActivity.java] -- onCompletion -- ");//mPlayer.start();//mPlayer.setLooping(true);}});mPlayer.setOnInfoListener(new MediaPlayer.OnInfoListener() {@Overridepublic boolean onInfo(MediaPlayer mp, int what, int extra) {Log.d("luoanhao", "[MainActivity.java] -- onInfo -- what:" + what);Log.d("luoanhao", "[MainActivity.java] -- onInfo -- extra:" + extra);if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {mSurfaceView.setBackgroundColor(Color.TRANSPARENT);}return false;}});mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {@Overridepublic boolean onError(MediaPlayer mp, int what, int extra) {Log.d("luoanhao", "[MainActivity.java] -- onError -- what:" + what);Log.d("luoanhao", "[MainActivity.java] -- onError -- extra:" + extra);return false;}});mPlayer.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {@Overridepublic void onVideoSizeChanged(MediaPlayer mp, int width, int height) {Log.d("luoanhao", "[MainActivity.java] -- onVideoSizeChanged -- width" + width);Log.d("luoanhao", "[MainActivity.java] -- onVideoSizeChanged -- height" + height);}});mPlayer.setOnTimedTextListener(new MediaPlayer.OnTimedTextListener() {@Overridepublic void onTimedText(MediaPlayer mp, TimedText text) {if (text != null) {Log.d("luoanhao", "[MainActivity.java] -- onTimedText -- text.getText():" + text.getText());}}});if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {mPlayer.setOnTimedMetaDataAvailableListener(new MediaPlayer.OnTimedMetaDataAvailableListener() {@Overridepublic void onTimedMetaDataAvailable(MediaPlayer mp, TimedMetaData data) {Log.d("luoanhao", "[MainActivity.java] -- onTimedMetaDataAvailable -- ");}});}}private void testTract() {if (mPlayer != null) {MediaPlayer.TrackInfo[] trackInfo = mPlayer.getTrackInfo();if (trackInfo != null && trackInfo.length > 0) {for (int i = 0; i < trackInfo.length; i++) {MediaPlayer.TrackInfo info = trackInfo[i];if (info.getTrackType() == MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT) {mPlayer.selectTrack(i);}}}}}@Overrideprotected void onPause() {super.onPause();}@Overrideprotected void onStop() {if (mPlayer != null) {mPlayer.release();mPlayer = null;}super.onStop();}@Overrideprotected void onDestroy() {super.onDestroy();}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.btn_play:mPlayer.start();break;case R.id.btn_pause:mPlayer.pause();break;case R.id.btn_mute:setMuteEnabled(true);break;case R.id.btn_unmute:setMuteEnabled(false);break;case R.id.btn_notify:showNotification();break;case R.id.btn_change_size:mSurfaceView.getHolder().setFixedSize(windowWidth,windowWidth*9/16);break;default:break;}}private class LahCallBack implements SurfaceHolder.Callback {@Overridepublic void surfaceCreated(SurfaceHolder surfaceHolder) {Log.d("luoanhao", "[MainActivity.java] -- LahCallBack -- surfaceCreated -- ");mPlayer.setDisplay(surfaceHolder);}@Overridepublic void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) {Log.d("luoanhao", "[MainActivity.java] -- surfaceChanged -- format:" + format);Log.d("luoanhao", "[MainActivity.java] -- surfaceChanged -- width:" + width);Log.d("luoanhao", "[MainActivity.java] -- surfaceChanged -- height:" + height);}@Overridepublic void surfaceDestroyed(SurfaceHolder surfaceHolder) {}}private void setMuteEnabled(boolean enabled) {AudioManager mAudioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, enabled);} else {if (enabled) {mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE, AudioManager.FLAG_SHOW_UI);} else {mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_UNMUTE, AudioManager.FLAG_SHOW_UI);}}}private void showNotification() {NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mContext);//设置标题mBuilder.setContentTitle("我是标题")//设置内容.setContentText("我是内容")//设置大图标.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))//设置小图标.setSmallIcon(R.mipmap.ic_launcher_round)//设置通知时间.setWhen(System.currentTimeMillis())//首次进入时显示效果.setTicker("我是测试内容")//设置优先级.setPriority(Notification.PRIORITY_HIGH)//设置通知方式,声音,震动,呼吸灯等效果,这里通知方式为声音.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS);//发送通知请求notificationManager.notify(notification_id++, mBuilder.build());}}

xml 布局,




本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部