七牛直播推流使用介绍
1:导入SDKSDK下载地址: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]