android play

          1.     mediaplay surfaceView        2.     VideoView        3.     Jni play        4.     第三方 vitamio      5.   视频解码VLC  ffmpeg       MediaPlayer  SurfaceView   1 SurfaceView 用于显示 SurfaceView  1采用双缓冲机制 ——-显示区 与缓冲区  这决定了它是播放器的最好选择 2 SurfaceView   的独特支持 可以由子线程直接控制 但是必须由mainThread 创建 view 基本都是在mainThread控制 包括创建 与控制 SurfaceView   的绘制可以在子线程完成   Code TestSurfaceView.Java   SurfaceHolder可以把它当成surface的控制器,用来操纵surface   mSurfaceView = (SurfaceView)this.findViewById(R.id.surfaceView_id); mSurfaceView.setZOrderOnTop(true);      mSurHolder = mSurfaceView.getHolder(); mSurHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mSurHolder.addCallback(Callback);     public interface Callback {         /** 创建时被调用  */         public void surfaceCreated(SurfaceHolder holder);           /**surface 改变的时候 */         public void surfaceChanged(SurfaceHolder holder, int format, int width,                 int height);           /* 销毁 */         public void surfaceDestroyed(SurfaceHolder holder); }       MediaPlayer AndroidMediaPlayer包含了Audiovideo的播放功能,在Android的界面上,MusicVideo两个应用程序都是调用MediaPlayer实现的。
MediaPlayer
在底层是基于OpenCore(PacketVideo)的库实现的         private void playVideo() {       try{          if(!isBusyPlay||count>2){             Log.d(TAG, "---------->playVideo");             count = 0;             isBusyPlay = true;             if(player != null){                player.reset();             }else{                player = new MediaPlayer();
 
//MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource               }             //8 Listener             player.setOnPreparedListener(this);             player.setOnCompletionListener(this);             player.setOnBufferingUpdateListener(this);             player.setOnErrorListener(this);                         player.setDataSource(path);                         player.setDisplay(mSurHolder);             player.setAudioStreamType(AudioManager.STREAM_MUSIC);             player.setScreenOnWhilePlaying(true);             player.prepareAsync();          }else{             count++;             Log.d(TAG, "---------->busy playing");          }          //设置监听事件       }catch(Exception e){          Log.d(TAG, "mediaplayer error: "+e.getMessage());       }          }   OnInfoListener  ——视频加载中的控制 需要地处协调701 702             player.setOnInfoListener(new OnInfoListener() {                               @Override                public booleanonInfo(MediaPlayer mp, int what, int extra) {                   // TODO Auto-generated method stub                   return false;                }             });                 VideoView VideoView extends SurfaceView implements MediaPlayerControl   其实就是google surfaceView mediaplay 封装一层给开发者方便调用     使用androidVideoView任然存在有些不足,比如说系统带的控制条太难看,全屏播放时无法全屏。 MediaController mController = new MediaController(this);   mVideoView.setMediaController(mController);      // Play Video public void onStart() {
      mVideoView.setVideoURI(mUri);
      mVideoView.start();
      super.onStart();
 }
      Jni play java成直接调用,C的播放 底层直接控制播放器 与显示   底层控制其实更方便 java成的Mediaplay 都是调用底层方法    private native final intnative_setMetadataFilter(Parcel request);    private static native final void native_init();    private native final void native_setup(Object mediaplayer_this);    private native final void native_finalize();           SurfaceView的核心其实SurfaceFlinger 应用层对SurfaceView 很熟悉 framework SurfaceFlinger很熟悉   对于SurfaceFlinger其实我也不太明白 是知道由这么一回事   开机启动时候init 创建MediaServer SurfaceFinger 而其他的Systrm server zygote       vitamio 感觉没什么多说的 https://www.vitamio.org/en/ 农民伯伯: http://www.cnblogs.com/over140/   最新版 把播放器设置为新的进程 使用的时候要注意     视频解码 VLC http://www.videolan.org/vlc/   Github code http://git.oschina.net/cuiran/vlc-android     http://xhc66.iteye.com/blog/797291 http://www.dotblogs.com.tw/jaelys/archive/2012/06/20/72934.aspx     ffmpeg http://www.ffmpeg.org/ https://github.com/havlenapetr/FFMpeg https://github.com/appunite/AndroidFFmpeg     http://3xin2yi.info/wwwroot/tech/doku.php/tech:multimedia:ffmpeg http://blog.csdn.net/conowen/article/details/7255776      http://blog.csdn.net/gobitan/article/details/22750719

转载于:https://my.oschina.net/kylinhuang/blog/472794

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值