简单推流示例
1. 设置参数
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//设置appID和appkey(请登录[http://open.cnlive.com/]注册)
Config.init(this, "60_irn9gh9d49",
"f7b6db55616d207fd5c07e2b580b5650c690aff58fb36d");
}
}
2. 在布局文件中加入预览View, 当前支持GLSurfaceView
<android.opengl.GLSurfaceView
android:id="@+id/camera_preview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentTop="true" />
3. 初始化预览view
GLSurfaceView glSurfaceView=(GLSurfaceView)findViewById(R.id.camera_preview);
4. 创建 Streamer 实例并配置推流相关参数
//初始化推流 SDK
mStreamer = new Streamer(this);
//设置预览编码帧率
mStreamer.setPreviewFps(15);
//设置推流编码帧率
mStreamer.setTargetFps(15);
//设置初始、最大、最小视频码率
mStreamer.setVideoKBitrate(800 * 3 / 4, 800, 800 / 4);
//设置音频编码码率
mStreamer.setAudioBitrate(48);
//分别设置预览和推流分辨率
mStreamer.setPreviewResolution(VIDEO_RESOLUTION_360P);
mStreamer.setTargetResolution(VIDEO_RESOLUTION_360P);
//设置编码模式(硬编/软编/软编兼容)
mStreamer.setEncodeMethod(ENCODE_METHOD_HARDWARE);
//设置预览 View
mStreamer.setDisplayPreview(surfaceView);
//设置自动重连(是否重连,重连次数,重连间隔时间)
setEnableAutoRestart(boolean restart, int count, int time)
//设置 Info 回调,可以收到相关通知信息
mStreamer.setOnInfoListener(mOnInfoListener);
//设置错误回调,收到该回调后,一般是发生了严重错误,比如网络断开等
mStreamer.setOnErrorListener(mOnErrorListener);
5.创建推流事件监听
private IStreamer.OnInfoListener mOnInfoListener =
new IStreamer.OnInfoListener() {
@Override
public void onInfo(int what, int msg1, int msg2) {
//...设置 Info 回调
}
};
private IStreamer.OnErrorListener mOnErrorListener =
new IStreamer.
OnErrorListener() {
@Override
public void onError(int what, int msg1, int msg2) {
//...设置错误回调
}
};
6.主要方法
//推流地址
mStreamer. setUrl(String url);
//音频采样率
mStreamer. setAudioSampleRate(int bitrate);
//音频ChannelNumber
void setAudioChannels(int num);
//旋转角度
void setRotateDegrees(int degrees);
//相机查看器
mStreamer. setDisplayPreview(GLSurfaceView surfaceView);
//设置滤镜
mStreamer. setFilter(int beautyFilter);
//静音
mStreamer. setMuteAudio(boolean isChecked);
//耳返
mStreamer. setEnableAudioPreview(boolean isChecked);
//最大关键帧间隔
mStreamer. setIFrameInterval(float videoFPS);
//开始背景音乐播放
mStreamer. startBgm(String path, boolean loop);
//停止背景音乐播放
mStreamer. stopBgm();
//开始摄像头预览
mStreamer. startCameraPreview();
//停止摄像头预览
mStreamer. stopCameraPreview();
//是否录制中
mStreamer. isRecording();
//开启推流统计功能
mStreamer. setEnableStreamStatModule(boolean var1);
//离屏推流 不设置预览view
mStreamer.setOffscreenPreview(int width, int height);
//开始视频录制
mStreamer.startRecord(String recordUrl);
//结束视频录制
mStreamer.stopRecord();
//设置编码场景模式
mStreamer.setVideoEncodeScene(int encodeScene);
// 设置编码性能档次
mStreamer.setVideoEncodeProfile(int encodeProfile);
//若设置为true,则使用MediaPlayer播放背景音乐,可以播放本地音频和流媒体文件;
//若设置为false,则使用KSYBgmPlayer播放背景音乐,只能播放本地音频
mStreamer.setEnableMediaPlayer(boolean isEnabled);
//若使用MediaPlayer,设置音量接口,两个参数分别代表左右声道,需要设置为相同的值
//取值范围:0.0f~2.0f
mStreamer.setVolume(float vol1, float vol2);
//若使用KSYBgmPlayer播放背景音乐,设置音量接口
//取值范围:0.0f~1.0f,>1.0f后增大音量,但是会有噪音,经过测试最大最好不要超//过4.0f,否则效果不佳
mStreamer.setVolume(float vol);
//mute背景音乐
mStreamer.setMute(boolean bool);
//是否前置摄像头
mStreamer.isFrontCamera();
//设置美颜滤镜出错时的监听
setFilterOnErrorListener(ImgFilterBase.OnErrorListener listener);
`2.1.2版本之后,此方法修改为`
setFilterOnErrorListener(ICNImgFilterBase.OnErrorListener listener);
7.开始推流
mStreamer.startStream(activityConfig);
//在此之前需要调用setUrl(url)设置推流地址
mStreamer.startStream();
//如果服务器已经创建完成直播活动,则可以直接调用此方法,传入活动ID以及推流地址,即可开始直播活动。
mStreamer.startActivity(String activityId, String url)
8.推流开始前及推流过程中可动态设置的常用方法
// 切换前后摄像头
mStreamer.switchCamera();
// 开关闪光灯
mStreamer.toggleTorch(true);
// 设置美颜滤镜,关于美颜滤镜的具体说明请参见专题说明
mStreamer.getImgTexFilterMgt().setFilter(mStreamer.getGLRender(),ImgTexFilterMgt.BEAUTY_DENOISE);
`2.1.2版本后,此方法改为`
mStreamer.getImgTexFilterMgt().setFilter(mStreamer.getGLRender(), CN_FILTER_BEAUTY_DENOISE.getFilter());
9.停止推流
mStreamer.stopStream();
10.Activity 的生命周期回调处理
采集的状态依赖于 Activity 的生命周期,所以必须在 Activity 的生命周期中也调用 SDK 相应的接口。
public class StreamActivity extends AppCompatActivity {
// ...
@Override
public void onResume() {
super.onResume();
// 一般可以在 onResume 中开启摄像头预览
mStreamer.startCameraPreview();
// 调用 Streamer 的 onResume 接口
mStreamer.onResume();
}
@Override
public void onPause() {
super.onPause();
mStreamer.onPause();
// 一般在这里停止摄像头采集
mStreamer.stopCameraPreview();
}
@Override
public void onDestroy() {
super.onDestroy();
// 清理相关资源
mStreamer.release();
}
}
11 .设置推流参数(注意:必传参数为 activityId、channelId)
ActivityConfig activityConfig = new ActivityConfig() {
@Override
public String getActivityID() {
//活动 ID,确保 SP 下的唯一性(即 appId 唯一) ,不能含下划线,
//不支持转义字符和rlencode 会处理的特殊字符,
//如下# $ % & ‘( )* + , . / : ; = ? @ [ / ]
return activityId;
}
@Override
public String getActivityName() {
//活动名称
return "";
}
@Override
public int getActivityStatus() {
//活动状态,0:未开始 /1:已开始 /2:已结束
// /3 已下线,默认为 0
return 0;
}
@Override
public int getIsHorizontalScreen() {
//屏幕方向,0:垂直即竖屏 /1:水平即横屏 ,默认为 1
return isHorizontalScreen;
}
@Override
public String getChannelID() {
//播放通道;PGC 业务:平台分配/UGC 业务:主播 ID 生成,
//确保 SP 下的唯一性,不能含下划线,
//不支持转义字符和 urlencode 会处理的特殊字符,
//如下! # $ % & ‘ ( )* + , . / : ; = ? @ [ / ]
return channelId;
}
@Override
public String getCoverImgUrl() {
//活动封面
return "";
}
@Override
public String getActivityCategory() {
//活动分类 ID
return "";
}
@Override
public String getExtensions() {
//扩展字段,
//参数格式为 Map 对象的 Json 字符串(主播昵称、头像)
return "";
}
@Override
public String getUuid() {
//设备 ID
return "";
}
@Override
public String getCallbackAcitvityStatushttpPostUrl() {
//回调通知活动状态(错误,结束、心跳异常等状态)
return "";
}
};