Example #1
0
        /*
         * 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();
                }
            }
        }
Example #2
0
 public void processMediaUpdate(OnCallMediaStateParam prm)
 {
     pjsua2PINVOKE.Call_processMediaUpdate(swigCPtr, OnCallMediaStateParam.getCPtr(prm));
     if (pjsua2PINVOKE.SWIGPendingException.Pending)
     {
         throw pjsua2PINVOKE.SWIGPendingException.Retrieve();
     }
 }
Example #3
0
 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();
     }
 }
Example #4
0
        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("现在仅支持音频哦亲");
                }
            }
        }
Example #5
0
        /// <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;
 }
Example #8
0
        /// <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)
                        {
                        }
                    }
                }
            }
        }
Example #9
0
 public void processMediaUpdate(OnCallMediaStateParam prm)
 {
     pjsua2PINVOKE.Call_processMediaUpdate(swigCPtr, OnCallMediaStateParam.getCPtr(prm));
     if (pjsua2PINVOKE.SWIGPendingException.Pending) throw pjsua2PINVOKE.SWIGPendingException.Retrieve();
 }
Example #10
0
 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();
 }