現在、PJSUA2で作業し始めています。私は呼び出しを受け入れるSIPクライアントを開発したいと思っています。それがコールを受け入れると、私はWAVファイルを再生し、入力をWAVファイルにも記録します。 PJSIPは私のデフォルトのオーディオデバイスを検出しませんが、とにかく使いたくないのでうまくいきますので、audDevManager()。setNullDev()でNullAudioに行きます。ここでPJSUA2 - Null-AudioでWindowsでWAVへの呼び出しを録音する
は私のコールのコードです:
class MyCall : public Call {
public:
AudioMediaPlayer player;
AudioMediaRecorder recorder;
AudioMediaRecorder recorderVerify;
MyCall(Account &acc, int call_id = PJSUA_INVALID_ID)
: Call(acc, call_id)
{ }
void MyCall::onCallState(OnCallStateParam &prm)
{
cout << "!!!!! onCallState is called !!!!!" << endl;
CallInfo ci = getInfo();
cout << "ci.state = " << ci.state << endl;
if (ci.state == PJSIP_INV_STATE_DISCONNECTED) {
delete this;
}
}
void MyCall::onCallMediaState(OnCallMediaStateParam &prm){
cout << "!!!!! onCallMediaState is called !!!!!" << endl;
try{
player.createPlayer("Ring02.wav", PJMEDIA_FILE_NO_LOOP);
recorder.createRecorder("in.wav");
recorderVerify.createRecorder("test.wav");
CallInfo ci = getInfo();
AudioMedia* aud_med = 0;
// Iterate all the call medias
for (unsigned i = 0; i < ci.media.size(); i++) {
cout << "Check audio " << i << endl;
if (ci.media[i].type==PJMEDIA_TYPE_AUDIO && getMedia(i)) {
aud_med = static_cast<AudioMedia*>(getMedia(i));
break;
}
}
if (aud_med != 0){
cout << "Send stuff to media" << endl;
// Connect the call audio media to sound device
AudDevManager& mgr = Endpoint::instance().audDevManager();
player.startTransmit(*aud_med);
aud_med->startTransmit(recorder);
player.startTransmit(recorderVerify);
}
} catch (Error& err) {
cout << "Error when playing: " << err.info() << endl;
}
}
};
私はすでにPJSUA2 - Recording call audio to wav fileに基づいてプレーヤーとレコーダーのメンバー変数を作成しました。これで、発信者にWAVファイルを正しく再生させることができ、自分のWAVファイルをrecorderVerifyで録音することもできます。しかし、発信者からの音声は録音されませんが、生成されたWAVファイルは代わりに無音です。
私は何かを初期化する必要がありますか?あなたの助けをありがとう!
何が間違っていたか分かりましたか? – Roman
Unfotunately not。私はそれを動かすことはできませんでしたし、SIPを伴わなかった他のプロジェクトと一緒に続けました。しかし、あなたが何か考えているなら、私はそれに戻り、試してみたいと思います。 – Niels