我正在使用
Ozeki
sip
库进行电话呼叫,单击面板时,呼叫应该转至电话,为了测试代码,我在 yate
客户端上添加了一个帐户,我编写了该帐户在代码中。电话接通了,但不幸的是,我一接电话就挂断了。这可能与麦克风的初始化有关。你能帮我吗?
`using Ozeki.Media;
using Ozeki.VoIP;
using Ozeki.VoIP.Media;
namespace OperationRoomControlPanelV1._1._0
{
public partial class FormMain : Form
{ static ISoftPhone softphone; // softphone object
static IPhoneLine phoneLine; // phoneline object
static IPhoneCall call;
static Microphone microphone;
static Speaker speaker;
static MediaConnector connector;
static PhoneCallAudioSender mediaSender;
static PhoneCallAudioReceiver mediaReceiver;
public FormMain()
{
CheckForIllegalCrossThreadCalls = false;
InitializeComponent();
softphone = SoftPhoneFactory.CreateSoftPhone(5000, 10000);
microphone = Microphone.GetDefaultDevice(); // Mikrofonu burada tanımlayın
speaker = Speaker.GetDefaultDevice(); // Hoparlörü burada tanımlayın
// Kayıt işlemini uygulama başlatılırken gerçekleştirelim.
RegisterAccount();
// Gelen çağrıyı yanıtlamak için olay işleyicisini ekleyelim.
softphone.IncomingCall += SoftPhone_IncomingCall;
// AyarlarTelefonPanel_Click metoduna çağrı yapmayı ekleyelim.
ayarlarTelefonPanel.Click += AyarlarTelefonPanel_Click;
}
private void RegisterAccount()
{
try
{
// SIP hesabınızın bilgilerini atıyoruz.
var registrationRequired = true;
var userName = "";
var displayName = "";
var authenticationId = "";
var registerPassword = "";
var domainHost = "";
var domainPort = 5060;
var account = new SIPAccount(registrationRequired, displayName, userName, authenticationId, registerPassword, domainHost, domainPort);
// Telefon hattını kaydediyoruz.
phoneLine = softphone.CreatePhoneLine(account);
softphone.RegisterPhoneLine(phoneLine);
}
catch (Exception ex)
{
MessageBox.Show($"Hata: {ex.Message}");
}
}
private void SoftPhone_IncomingCall(object sender, Ozeki.Media.VoIPEventArgs<IPhoneCall> e)
{
// Gelen çağrıyı yanıtlıyoruz.
call = e.Item;
call.CallStateChanged += PhoneCall_CallStateChanged;
call.Answer();
}
private void PhoneCall_CallStateChanged(object sender, CallStateChangedArgs e)
{
Console.WriteLine($"Call State Changed: {e.State}");
if (e.State == CallState.Answered)
{
SetupDevices();
}
else if (e.State == CallState.Completed)
{
StopDevices();
}
}
private void SetupDevices()
{
try
{
connector = new MediaConnector();
mediaSender = new PhoneCallAudioSender();
mediaReceiver = new PhoneCallAudioReceiver();
connector.Connect(microphone, mediaSender);
connector.Connect(mediaReceiver, speaker);
mediaSender.AttachToCall(call);
mediaReceiver.AttachToCall(call);
microphone.Start();
speaker.Start();
}
catch (Exception ex)
{
Console.WriteLine($"SetupDevices Error: {ex.Message}");
}
}
private void StopDevices()
{
try
{
microphone.Stop();
speaker.Stop();
// Diğer gerekli işlemleri burada gerçekleştirin
}
catch (Exception ex)
{
Console.WriteLine($"StopDevices Error: {ex.Message}");
}
}
private void AyarlarTelefonPanel_Click(object sender, EventArgs e)
{
// Hastanenin SIP adresini alalım.
string sipAddress = "sip:[email protected]";
// Telefon hattı üzerinden çağrı yapalım
IPhoneCall call = softphone.CreateCallObject(phoneLine, sipAddress);
call.CallStateChanged += PhoneCall_CallStateChanged;
call.Start();
}
}
}`
我希望这是一个真正的电话。
your text
。
呼叫在应答后立即结束的典型原因是:双方的音频编解码器和/或加密设置不匹配。检查 yate 客户端的设置并验证您的应用程序是否使用相同的设置。