背景分析
随着信息化时代的到来,同屏技术在教学、会议、大型活动中的应用越来越广泛。同屏结束简单说来,就是将手机、平板等一些移动设备上面的音视频资料通过无线或有线网络同步到显示设备上。换言之,就是将移动设备中的音视频资料景象到显示频幕上面。就像照镜子一样,移动设备上显示什么,显示屏上就会显示什么。
EasyScreenLive功能介绍
EasyScreenLive是一款简单、高效、稳定的集采集,编码,组播,推流和流媒体RTSP服务于一身的同屏功能组件,具低延时,高效能,低丢包等特点。目前支持Windows,Android平台,通过EasyScreenLive我们就可以避免接触到稍显复杂的音视频源采集,编码和流媒体推送以及RTSP/RTP/RTCP/RTMP服务流程,只需要调用EasyScreenLive的几个API接口,就能轻松、稳定地把流媒体音视频数据RTMP推送给EasyDSS服务器以及发布RTSPServer服务, RTSP同屏服务支持组播和单播两种模式。
(演示对比)
(硬件解码)
EasyScreenLive-Win开启屏幕采集失败的解决方法
问题描述
最近有开发者从https://github.com/tsingsee/EasyScreenLive下载EasyScreenLive组件后,在C#版本中遇到如下图错误,导致程序不能正常采集屏幕。
分析问题
在应用场景沟通中我们发现,开发者是在虚拟机Server 2008的系统上运行的程序,我们的开发环境是Win10,正常应该没有问题。
通过跟踪代码发现原因出在C#版我们编译的Demo默认是采集音频的,在开发者虚拟机环境中是没有音频输入,所以Demo无法正常工作。
解决问题
CapturePusherSDK类中StartCapture函数中第五个参数是音频采集0:采集 -1:不采集,没有音频输入一定要赋值-1
public static int EasyScreenLive_StartCapture(IntPtr pusherHandle, SOURCE_TYPE eSourceType, string szURL, IntPtr hCapWnd, EncoderType encodeType, string szDataType = "RGB24", int nWidth=1280, int nHeight=720, int nBitRate = 2048, bool bTranscode=false, ENCODE_MODE encMode=0)
{
var ret = EasyScreenLive_StartCapture(pusherHandle, eSourceType, szURL, 0, -1, hCapWnd, encodeType, nVideoWidth : nWidth, nVideoHeight: nHeight, nBitRate: nBitRate, szDataType: szDataType, bTransCode:bTranscode, encodeMode:encMode);
//注意第五个参数是音频采集0:采集 -1:不采集,没有音频输入一定要赋值-1
return ret;
}