注:没有实现音频推送
录屏到直播逻辑过程
推流端:得到录屏权限,开始录屏
推流端:开启线程,解码得到裸流
推流端:通过Rtsp建立服务器推流
播放端:得到rtsp://ip 通过vlc播放
什么是Rtsp?
RTSP协议以客户服务器方式工作,,如:暂停/继续、后退、前进等。它是一个多媒体播放控制协议,用来使用户在播放从因特网下载的实时数据时能够进行控制,
因此 RTSP 又称为“因特网录像机遥控协议”。RTSP协议详解
如何录屏?
运用Android 5.0开放接口MediaProjection,通过MediaProjectionManage申请录屏权限,用户允许后开始录制屏幕;
步骤:
1.获取MediaProjectionManager实例
mMediaProjectionManager = (MediaProjectionManager) getSystemService(MEDIA_PROJECTION_SERVICE);
2.申请权限
Intent captureIntent = mMediaProjectionManager.createScreenCaptureIntent();
startActivityForResult(captureIntent, REQUEST_CODE);
3.在onActivityResult获取授权结果
public void onActivityResult(int requestCode, int resultCode, Intent data) {
try {
MediaProjection mediaProjection = mMediaProjectionManager.getMediaProjection(resultCode, data);
if(mediaProjection == null){
T.showShort(ServerActivity.this, "程序发生错误:MediaProjection@1");
RunState.getInstance().setRun(false);
return;
}
}
catch (Exception e){
}
}
4.创建录屏线程
public class ScreenRecordThread extends Thread {
private final static String TAG = "ScreenRecord";
private Surface mSurface;
private Context mContext;
private VirtualDisplay mVirtualDisplay;
private MediaProjection mMediaProjection;
private VideoMediaCodec mVideoMediaCodec;
private WindowManager wm;
private int windowWidth;
private int windowHeight;
private int screenDensity;
public ScreenRecordThread(Context context, MediaProjection mp, H264DataCollecter mH264Collecter){
this.mContext = context;
this.mMediaProjection = mp;
wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
windowWidth = DisplayUtils.getDisplayW(context);
windowHeight