从2019年初开始，不再支持从采集端发起对讲。

播放端不能接受对讲。只能从播放端发起对讲，采集端接收对讲。

Demo已经删除从采集端发起对讲的代码。

如果要从采集端呼叫播放端，可以发送消息到播放端，由播放端调用ExtVideo.videoStart 函数打开对讲。

例如：

int iErr = MainActivity.getRender().extVideo.videoStart(MainActivity.getRender().GetLive().GetSelfPeer(), 
	MainActivity.getRender().otherSurfaceView, true);
if (iErr > PG_ERR_Normal) {
	showText("videoStart : iErr = " + iErr);
}

同样，在呼叫流程中，不管那端呼叫，开始时候，呼叫消息通过服务器转发然后建立视音频通道。

在建立视频通道并同步之后会上报同步消息onVideoSync。

这个时候再由播放端调用ExtVideo.videoStart 函数打开对讲。

例如：
/**
 * 0 : No request
 * 1 : request ed
 * 2 : request failed
 */
int extReqVideoStartStatus = 0;
public int extReqVideoStart(String sObjPeer){
	msVideoPeer = sObjPeer;
	int iErr = extVideo.videoStart(sObjPeer, otherSurfaceView, true);
	if(iErr > 0 && iErr != PG_ERR_Opened){
		this.extReqVideoStartStatus = 2;
	}
	else{
		this.extReqVideoStartStatus = 1;
	}
	return iErr;
}
@Override
public int onVideoSync(String sObj, String sAct, String sObjPeer) {

	if ("0".equals(sAct)) {
		//msObjPeer = "";
		//extVideo.stop();
	} else if ("1".equals(sAct)) {


		String sSelfObjPeer = m_Live.GetSelfPeer();
		String sID1 = ObjPeerParseID(sSelfObjPeer);
		String sID2 = ExtVideoObjParseID(sObj);

		String sID3 = ObjPeerParseID(sObjPeer);
		//
		if(sCapID.equals(sID3) && sID1.equals(sID2) ) {
			String sInfo = "onVideoSync : extReqVideoStart";
			Log.d("ExtVideoEvent",sInfo);
			int iErr = extReqVideoStart(sSelfObjPeer);
			if(iErr > PG_ERR_Normal && iErr != PG_ERR_Opened){
				showToast(context,"请求视频错误：" + iErr);
			}else {
				showToast(context, "正在请求打开视频");
			}
		}
	}
//            String sInfo = "onVideoSync : sObj = " + sObj + " sAct = " + sAct + " sObjPeer = " + sObjPeer;
//            showToast(sInfo);
	return 0;
}

同步消息有三个参数：
1、sObj 是视频通道信息，视频通道在ExtVideo中建立了两条。
一条是规划用来从A节点传输到B节点的,A->B，另一条是用来规划从B节点传输到A节点的,B->A./22
2、sAct 1 是同步 ，0 是去同步。也就是和对端节点的视频连接以经断开。
3、sObjPeer 节点对象名称。

这段代码的意思就是在视频通道同步的时候发起对讲。