ローカルエリアネットワークは紙化された会議パッケージがなく、プッシュと再生を3ステップで実現

6907 ワード

rstp
前の文章
手順:
1.libをローカルにダウンロードし、依存
RtspServerAndVlcPlay git clone https://github.com/wobiancao/RtspServerAndVlcPlay.git
  • プッシュエンドのみであればrtsplibrary
  • に依存する必要がある.
  • 再生端のみであればlibvlc-android
  • に依存するだけです : rtsplibrary libstreaming libvlc-android vlc ,
    libvlc-android元プロジェクトアドレス:vlc-android-sdk複数点star作者を励ましましょう
    2.押流端
  • 初期化
  •     public static final int REQUEST_CODE = 1001;
        private RtspServer mRtspServer;
        private MediaProjectionManager mMediaProjectionManager;
        private ScreenRecordThread mScreenRecord;
    
        mMediaProjectionManager = (MediaProjectionManager) getSystemService(MEDIA_PROJECTION_SERVICE);
        private ServiceConnection mRtspServiceConnection = new ServiceConnection() {
    
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                mRtspServer = ((RtspServer.LocalBinder)service).getService();
                mRtspServer.addCallbackListener(mRtspCallbackListener);
                mRtspServer.start();
            }
    
            @Override
            public void onServiceDisconnected(ComponentName name) {}
        };
    
  • ライセンスが成功すると、スクリーンスレッドサービス
  • が開始される.
                //    
                Intent captureIntent = mMediaProjectionManager.createScreenCaptureIntent();
                startActivityForResult(captureIntent, REQUEST_CODE);
                bindService(new Intent(this,RtspServer.class), mRtspServiceConnection, Context.BIND_AUTO_CREATE);
                //    
                 public void onActivityResult(int requestCode, int resultCode, Intent data) {
                  try {
                      MediaProjection mediaProjection = mMediaProjectionManager.getMediaProjection(resultCode, data);
                      if(mediaProjection == null){
                          T.showShort(ServerActivity.this, "      :MediaProjection@1");
                          RunState.getInstance().setRun(false);
                        return;
                }
               //      
                mScreenRecord = new ScreenRecordThread(this,mediaProjection, this);
                mScreenRecord.start();
            }
            catch (Exception e){
            }
        }
    
  • H 264 DataCollecterインタフェースのコールバックを実現し、プッシュストリームデータ
  • を設定する.
    @Override
        public void collect(H264Data data) {
            DataUtil.getInstance().putData(data);
        }
    

    3.再生端
  • レイアウト
  • "@+id/player_surface"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
  • インスタンス化
  •     SurfaceView mPlayView;
        private String playUrl = "";
        private LibVLC libVLC = null;
        private MediaPlayer mediaPlayer;
        private SurfaceHolder mSurfaceHolder;
    
            ArrayList options = new ArrayList<>();
            libVLC = new LibVLC(getApplication(), options);
            mediaPlayer = new MediaPlayer(libVLC);
            mSurfaceHolder = mPlayView.getHolder();//      
            mSurfaceHolder.setFixedSize(DisplayUtils.getDisplayW(this), DisplayUtils.getDisplayH(this));
            mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            mediaPlayer.getVLCVout().setVideoSurface(mPlayView.getHolder().getSurface(), mSurfaceHolder);
            mediaPlayer.getVLCVout().attachViews();
            Media media = new Media(libVLC, Uri.parse(playUrl));
            mediaPlayer.setMedia(media);
    
  • 再生 mediaPlayer.play();
  • //                 
    private void onPreCreate() {
            this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    
            //  title
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            //  Activity      
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
            //          
    //        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
            getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav
                            // bar
                            | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                            | View.SYSTEM_UI_FLAG_IMMERSIVE);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//    
        }
    
    public void onExit(View view) {
            finish();
        }
    
        //              
        @Override
        public void onBackPressed() {
            return;
        }
    
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_HOME || keyCode == KeyEvent.KEYCODE_BACK) {
                return true;
            } else {
                return super.onKeyDown(keyCode, event);
            }
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            if (mediaPlayer != null) {
                mediaPlayer.pause();
            }
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            if (mediaPlayer != null) {
                mediaPlayer.play();
            }
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            if (mediaPlayer != null) {
                mediaPlayer.release();
                mediaPlayer = null;
            }
        }
    
    

    体験する
    apkダウンロードアドレス
    本プロジェクトgithubアドレス
    ようこそstar
    Thanks
    libstreaming
    AndroidShow
    ScreenRecorder
    vlc-android-sdk
    転載先:https://juejin.im/post/5bf6693ae51d4520a93e1646