/* * TODO: needs cleaned up, possible duplicate code of getMedia * */ public override void onCallMediaState(OnCallMediaStateParam prm) { base.onCallMediaState(prm); //lock (locker) { var ci = getInfo(); if (ci == null) { return; } var cmiv = ci.media; foreach (var cmi in cmiv.Where(cmi => cmi.type == pjmedia_type.PJMEDIA_TYPE_AUDIO)) { NotifyCallMediaState(cmi.status); if (!cmi.status.In(pjsua_call_media_status.PJSUA_CALL_MEDIA_ACTIVE, pjsua_call_media_status.PJSUA_CALL_MEDIA_REMOTE_HOLD)) { continue; } // connect ports connectAudioDevice(); } } }
public void processMediaUpdate(OnCallMediaStateParam prm) { pjsua2PINVOKE.Call_processMediaUpdate(swigCPtr, OnCallMediaStateParam.getCPtr(prm)); if (pjsua2PINVOKE.SWIGPendingException.Pending) { throw pjsua2PINVOKE.SWIGPendingException.Retrieve(); } }
public virtual void onCallMediaState(OnCallMediaStateParam prm) { if (SwigDerivedClassHasMethod("onCallMediaState", swigMethodTypes2)) { pjsua2PINVOKE.Call_onCallMediaStateSwigExplicitCall(swigCPtr, OnCallMediaStateParam.getCPtr(prm)); } else { pjsua2PINVOKE.Call_onCallMediaState(swigCPtr, OnCallMediaStateParam.getCPtr(prm)); } if (pjsua2PINVOKE.SWIGPendingException.Pending) { throw pjsua2PINVOKE.SWIGPendingException.Retrieve(); } }
public override void onCallMediaState(OnCallMediaStateParam prm) { base.onCallMediaState(prm); var ci = getInfo(); for (uint i = 0; i < ci.media.Count; i++) { if (ci.media[(int)i].type == pjmedia_type.PJMEDIA_TYPE_AUDIO) { var audMed = AudioMedia.typecastFromMedia(this.getMedia(i)); var mgr = Endpoint.instance().audDevManager(); audMed.startTransmit(mgr.getPlaybackDevMedia()); mgr.getCaptureDevMedia().startTransmit(audMed); } else { throw new ApplicationException("现在仅支持音频哦亲"); } } }
/// <summary> /// Обрабатываем событие изменения статуса медиа /// </summary> /// <param name="prm"></param> public override void onCallMediaState(OnCallMediaStateParam prm) { CallInfo ci = getInfo(); AudioMedia aud_med; try { aud_med = getAudioMedia(-1); } catch { return; } AudDevManager mgr = Endpoint.instance().audDevManager(); AudioMedia play_dev_med = mgr.getPlaybackDevMedia(); aud_med.startTransmit(play_dev_med); AudioMedia cap_aud_med = mgr.getCaptureDevMedia(); cap_aud_med.startTransmit(aud_med); }
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(OnCallMediaStateParam obj) { return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr); }
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(OnCallMediaStateParam obj) { return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; }
/// <summary> /// Notify application when media state in the call has changed. /// Normal application would need to implement this callback, e.g. /// to connect the call's media to sound device. When ICE is used, /// this callback will also be called to report ICE negotiation failure. /// </summary> /// <param name="sender">The current sender.</param> /// <param name="e">The event parameter.</param> private void _call_OnCallMediaState(object sender, OnCallMediaStateParam e) { Nequeo.Net.PjSip.CallInfo ci = e.Info; if (ci != null) { // For each media. for (int i = 0; i < ci.Media.Length; i++) { bool recoderSet = false; // If objects exist. if (ci.Media != null && ci.Media[i] != null && e.CurrentCall != null) { // Create the call media param. CallMediaStateParam mediaState = new CallMediaStateParam(); mediaState.Suspend = false; mediaState.CallID = ci.Id; mediaState.CallOnHold = (ci.Media[i].Status == CallMediaStatus.PJSUA_CALL_MEDIA_LOCAL_HOLD ? true : false); mediaState.MediaType = ci.Media[i].Type; // If video type. if (ci.Media[i].Type == Nequeo.Net.PjSip.MediaType.PJMEDIA_TYPE_VIDEO) { _hasVideo = true; _videoWindow = ci.Media[i].VideoWindowEx; mediaState.HasVideo = _hasVideo; _isVideoValid = (ci.Media[i].Direction == MediaDirection.PJMEDIA_DIR_NONE ? false : true); mediaState.IsVideoValid = _isVideoValid; } else { _hasVideo = false; _isVideoValid = false; _videoWindow = null; mediaState.HasVideo = _hasVideo; mediaState.IsVideoValid = _isVideoValid; } // Handle the event. OnCallMediaState?.Invoke(this, mediaState); // If audio type. if ((ci.Media[i].Type == Nequeo.Net.PjSip.MediaType.PJMEDIA_TYPE_AUDIO) && (e.CurrentCall.GetMedia((uint)i) != null)) { // Get the audio media. AudioMedia audioMedia = (AudioMedia)e.CurrentCall.GetMedia((uint)i); _audioMedias.Add(audioMedia); // If not suspend, normal operations. if (!mediaState.Suspend) { // Transmitting. _isTransmitting = true; // Connect the call audio media to sound device. audioMedia.StartTransmit(_mediaManager.GetPlaybackDeviceMedia()); _mediaManager.GetCaptureDeviceMedia().StartTransmit(audioMedia); // If recording. if (!recoderSet && !String.IsNullOrEmpty(_recordFilename)) { // Get the capture audio device. AudioMedia audioMediaRecord = _mediaManager.GetCaptureDeviceMedia(); try { // Create the recorder. _recorder = new AudioMediaRecorder(); _recorder.CreateRecorder(_recordFilename, 0, 0, 0); _recorder.StartRecordingConversation(audioMediaRecord, new AudioMedia[] { audioMedia }); } catch { } // Set one recorder. recoderSet = true; } } } // If video type. if (ci.Media[i].Type == Nequeo.Net.PjSip.MediaType.PJMEDIA_TYPE_VIDEO) { } } } } }
public void processMediaUpdate(OnCallMediaStateParam prm) { pjsua2PINVOKE.Call_processMediaUpdate(swigCPtr, OnCallMediaStateParam.getCPtr(prm)); if (pjsua2PINVOKE.SWIGPendingException.Pending) throw pjsua2PINVOKE.SWIGPendingException.Retrieve(); }
public virtual void onCallMediaState(OnCallMediaStateParam prm) { if (SwigDerivedClassHasMethod("onCallMediaState", swigMethodTypes2)) pjsua2PINVOKE.Call_onCallMediaStateSwigExplicitCall(swigCPtr, OnCallMediaStateParam.getCPtr(prm)); else pjsua2PINVOKE.Call_onCallMediaState(swigCPtr, OnCallMediaStateParam.getCPtr(prm)); if (pjsua2PINVOKE.SWIGPendingException.Pending) throw pjsua2PINVOKE.SWIGPendingException.Retrieve(); }