admin 发表于 2017-12-23 14:00:54

七牛直播推流使用介绍

1:导入SDK

SDK下载地址:https://github.com/pili-engineering/PLDroidMediaStreaming/
导入结果如图

http://hh85.oss-cn-hangzhou.aliyuncs.com/android/201610/QQ%E5%9B%BE%E7%89%8720171223135805.png

2:配置权限

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-feature
      android:glEsVersion="0x00020000"
      android:required="true" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3:启动推流


public class SWCameraStreamingActivity extends AppCompatActivity{

    private MediaStreamingManager mMediaStreamingManager;
    private StreamingProfile mProfile;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_swcamera_streaming);
      AspectFrameLayout afl = (AspectFrameLayout) findViewById(R.id.cameraPreview_afl);
      afl.setShowMode(AspectFrameLayout.SHOW_MODE.REAL);
      GLSurfaceView glSurfaceView = (GLSurfaceView) findViewById(R.id.cameraPreview_surfaceView);
      //获得推流地址
      String pushUrl = getIntent().getStringExtra("url");
      Log.i("TAG","推流地址"+pushUrl);
      mProfile = new StreamingProfile();
      try {
            mProfile.setVideoQuality(StreamingProfile.VIDEO_QUALITY_HIGH1)
                  .setAudioQuality(StreamingProfile.AUDIO_QUALITY_MEDIUM2)
                  .setEncodingSizeLevel(StreamingProfile.VIDEO_ENCODING_HEIGHT_480)
                  .setEncoderRCMode(StreamingProfile.EncoderRCModes.QUALITY_PRIORITY)
                  .setPublishUrl(pushUrl);

            CameraStreamingSetting setting = new CameraStreamingSetting();
            setting.setCameraId(Camera.CameraInfo.CAMERA_FACING_BACK)
                  .setContinuousFocusModeEnabled(true)
                  .setCameraPrvSizeLevel(CameraStreamingSetting.PREVIEW_SIZE_LEVEL.MEDIUM)
                  .setCameraPrvSizeRatio(CameraStreamingSetting.PREVIEW_SIZE_RATIO.RATIO_16_9);
            mMediaStreamingManager = new MediaStreamingManager(this, afl, glSurfaceView, AVCodecType.SW_VIDEO_WITH_SW_AUDIO_CODEC);// soft codec
            mMediaStreamingManager.prepare(setting, mProfile);
            mMediaStreamingManager.setStreamingStateListener(new StreamingStateChangedListener() {
                @Override
                public void onStateChanged(StreamingState streamingState, Object extra) {
                  Log.i("TAG","状态"+streamingState);
                  switch (streamingState) {
                        case PREPARING:
                            break;
                        case READY:
                            // start streaming when READY
                            new Thread(new Runnable() {
                              @Override
                              public void run() {
                                    if (mMediaStreamingManager != null) {
                                        Log.i("TAG", "开始推流");
                                        mMediaStreamingManager.startStreaming();
                                    }
                              }
                            }).start();
                            break;
                        case CONNECTING:
                            break;
                        case STREAMING:
                            // The av packet had been sent.
                            break;
                        case SHUTDOWN:
                            // The streaming had been finished.
                            break;
                        case IOERROR:
                            // Network connect error.
                            break;
                        case OPEN_CAMERA_FAIL:
                            // Failed to open camera.
                            break;
                        case DISCONNECTED:
                            // The socket is broken while streaming
                            break;
                  }
                }
            });
      }catch (URISyntaxException e) {
            e.printStackTrace();
      }
    }

    @Override
    protected void onResume() {
      super.onResume();
      mMediaStreamingManager.resume();
    }
    @Override
    protected void onPause() {
      super.onPause();
      // You must invoke pause here.
      mMediaStreamingManager.pause();
    }


}
XML代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/background_floating_material_dark"
    tools:context=".activity.SWCameraStreamingActivity" >
    <com.qiniu.pili.droid.streaming.widget.AspectFrameLayout
      android:id="@+id/cameraPreview_afl"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_centerHorizontal="true"
      android:layout_alignParentTop="true">
      <android.opengl.GLSurfaceView
            android:id="@+id/cameraPreview_surfaceView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center" />
    </com.qiniu.pili.droid.streaming.widget.AspectFrameLayout>
</RelativeLayout>

页: [1]
查看完整版本: 七牛直播推流使用介绍