局域網(wǎng)無紙化會議封裝剪验,只需三步實現(xiàn)推流和播放

結(jié)構(gòu)圖

vlc播放效果.gif

上篇文章

步驟:

1.下載lib到本地塔逃,然后依賴

RtspServerAndVlcPlay
git clone https://github.com/wobiancao/RtspServerAndVlcPlay.git

  1. 如果只是推流端,只需要依賴 rtsplibrary
  2. 如果只是播放端,只需要依賴libvlc-android
    重點聲明: rtsplibrary是基于libstreaming開源封裝 libvlc-android是別人開源vlc項目編譯好的茂洒,非本人編譯
    libvlc-android 原項目地址:vlc-android-sdk 多點幾個star給作者鼓勵吧

2.推流端

  1. 初始化
    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) {}
    };
  1. 授權(quán)成功后開啟錄屏線程服務(wù)
            //請求授權(quán)
            Intent captureIntent = mMediaProjectionManager.createScreenCaptureIntent();
            startActivityForResult(captureIntent, REQUEST_CODE);
            bindService(new Intent(this,RtspServer.class), mRtspServiceConnection, Context.BIND_AUTO_CREATE);
            //授權(quán)回調(diào)
             public void onActivityResult(int requestCode, int resultCode, Intent data) {
              try {
                  MediaProjection mediaProjection = mMediaProjectionManager.getMediaProjection(resultCode, data);
                  if(mediaProjection == null){
                      T.showShort(ServerActivity.this, "程序發(fā)生錯誤:MediaProjection@1");
                      RunState.getInstance().setRun(false);
                    return;
            }
           //開啟錄屏線程
            mScreenRecord = new ScreenRecordThread(this,mediaProjection, this);
            mScreenRecord.start();
        }
        catch (Exception e){
        }
    }
  1. 實現(xiàn)H264DataCollecter接口回調(diào)慕爬,設(shè)置推流數(shù)據(jù)
@Override
    public void collect(H264Data data) {
        DataUtil.getInstance().putData(data);
    }

3.播放端

  1. 布局
<SurfaceView
        android:id="@+id/player_surface"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
  1. 實例化
    SurfaceView mPlayView;
    private String playUrl = "";
    private LibVLC libVLC = null;
    private MediaPlayer mediaPlayer;
    private SurfaceHolder mSurfaceHolder;

        ArrayList<String> options = new ArrayList<>();
        libVLC = new LibVLC(getApplication(), options);
        mediaPlayer = new MediaPlayer(libVLC);
        mSurfaceHolder = mPlayView.getHolder();//用于設(shè)置視圖
        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);
  1. 播放
    調(diào)用mediaPlayer.play();方法即可開始播放
//設(shè)置全屏去掉狀態(tài)欄虛擬鍵 屏幕常亮
private void onPreCreate() {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);

        //去除title
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        //去掉Activity上面的狀態(tài)欄
        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;
        }
    }

體驗

qr.png

apk下載地址

本項目github地址
歡迎star

Thanks

libstreaming
AndroidShow
ScreenRecorder
vlc-android-sdk

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市茵典,隨后出現(xiàn)的幾起案子湘换,更是在濱河造成了極大的恐慌,老刑警劉巖统阿,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彩倚,死亡現(xiàn)場離奇詭異,居然都是意外死亡扶平,警方通過查閱死者的電腦和手機帆离,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來结澄,“玉大人哥谷,你說我怎么就攤上這事÷橄祝” “怎么了们妥?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長勉吻。 經(jīng)常有香客問我监婶,道長,這世上最難降的妖魔是什么齿桃? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任惑惶,我火速辦了婚禮,結(jié)果婚禮上短纵,老公的妹妹穿的比我還像新娘带污。我一直安慰自己,他們只是感情好香到,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布鱼冀。 她就那樣靜靜地躺著报破,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雷绢。 梳的紋絲不亂的頭發(fā)上泛烙,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音翘紊,去河邊找鬼蔽氨。 笑死,一個胖子當著我的面吹牛帆疟,可吹牛的內(nèi)容都是我干的鹉究。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼踪宠,長吁一口氣:“原來是場噩夢啊……” “哼自赔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柳琢,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤绍妨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后柬脸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體他去,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年倒堕,在試婚紗的時候發(fā)現(xiàn)自己被綠了灾测。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡垦巴,死狀恐怖媳搪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骤宣,我是刑警寧澤秦爆,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站憔披,受9級特大地震影響鲜结,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜活逆,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拗胜。 院中可真熱鬧蔗候,春花似錦、人聲如沸埂软。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至所灸,卻和暖如春丽惶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背爬立。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工钾唬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人侠驯。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓抡秆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吟策。 傳聞我的和親對象是個殘疾皇子儒士,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容