Android用yasea集成推流服務並實現美顏濾鏡

1,第一步先將yasea依賴集成到Android項目裏面(這一步就不介紹了,百度有開源的包下載)

2,第二步在Android項目裏面新建一個activity實現

RtmpHandler.RtmpListener, SrsRecordHandler.SrsRecordListener, SrsEncodeHandler.SrsEncodeListener

這幾個接口。

3,第三步創建一個簡單的佈局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".activity.PullStreamActivity">
    <net.ossrs.yasea.SrsCameraView
        android:id="@+id/srcView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:background="@color/transparent"
        >
        <EditText
            android:id="@+id/pullUrl"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="50dp"
            android:hint="推流地址"
            ></EditText>
        <Button
            android:id="@+id/pullBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="推流"
            />
    </LinearLayout>
    <ListView
        android:id="@+id/typesList"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginTop="50dp"
        android:scrollbars="none"
        android:divider="@null"
        >
    </ListView>

</FrameLayout>

4,第四部初始化控件就不說了,直接開始準備推了。

初始化一些推流工作,設置各種回調,預覽頁面,像素,編碼,開啓攝像頭等等。

    private void initVideo() {
        // restore data.
        mPublisher = new SrsPublisher(srcView);
        mPublisher.setEncodeHandler(new SrsEncodeHandler(this));
        mPublisher.setRtmpHandler(new RtmpHandler(this));
        mPublisher.setRecordHandler(new SrsRecordHandler(this));
        mPublisher.setPreviewResolution(640, 360);
        mPublisher.setOutputResolution(360, 640);
        mPublisher.setVideoHDMode();
        mPublisher.switchToSoftEncoder();//默認使用硬編碼
        mPublisher.startCamera();
        srcView.setCameraCallbacksHandler(new SrsCameraView.CameraCallbacksHandler() {
            @Override
            public void onCameraParameters(Camera.Parameters params) {

            }
        });


    }

準備開始推流(這裏地址可以設置成自己專有的服務地址,例如:rtmp://ip:port/live/1234)

    @OnClick(R.id.pullBtn)
    public void onClick() {
        // mPublisher.switchToHardEncoder();
        mPublisher.startPublish(pullUrl.getText().toString().trim());
        mPublisher.startCamera();
        Toast.makeText(this, "推流成功", Toast.LENGTH_SHORT).show();

    }

設置美顏和濾鏡(一些濾鏡效果不知道專業術語怎麼稱呼,直接百度翻譯的)

    private void initTypes() {//初始化美顏
        types.put("冷靜", MagicFilterType.COOL);
        types.put("美顏", MagicFilterType.BEAUTY);
        types.put("素顏", MagicFilterType.NONE);
        types.put("早起的鳥", MagicFilterType.EARLYBIRD);
        types.put("常綠的", MagicFilterType.EVERGREEN);
        types.put("1997年", MagicFilterType.N1977);
        types.put("懷舊", MagicFilterType.NOSTALGIA);
        types.put("甜食", MagicFilterType.ROMANCE);
        types.put("浪漫", MagicFilterType.SAKURA);
        types.put("日出", MagicFilterType.SUNRISE);
        types.put("日落", MagicFilterType.SUNSET);
        types.put("柔和", MagicFilterType.TENDER);
        types.put("烤麪包機", MagicFilterType.TOASTER2);
        types.put("巴倫西亞", MagicFilterType.VALENCIA);
        types.put("瓦爾登湖", MagicFilterType.WALDEN);
        types.put("溫柔", MagicFilterType.WARM);
        String[] array = new String[]{"素顏","冷靜","美顏","早起的鳥","常綠的","1997年","懷舊","甜食","浪漫", "日出","日落",
                "烤麪包機", "巴倫西亞","瓦爾登湖","溫柔","柔和"};
        ArrayAdapter arrayAdapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,array);
        typesList.setAdapter(arrayAdapter);
        typesList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                MagicFilterType filterType = types.get(array[position]);
                mPublisher.switchCameraFilter(filterType);
                Toast.makeText(PullStreamActivity.this, array[position], Toast.LENGTH_SHORT).show();
            }
        });

    }

5,退出頁面時關閉推流,錄音攝像頭等等。

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mPublisher.stopCamera();
        mPublisher.stopPublish();
        mPublisher.stopAudio();
        mPublisher.stopEncode();
        mPublisher.stopRecord();
    }

6,最後記得加權限,權限申請什麼的不在這寫了,在此附上一個依賴的下載地址,希望能幫到大家。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章