PJSUA2 Java - 如何获取正在进行的通话的音频媒体
PJSUA2 Java - How to get ongoing Call's AudioMedia
我正在使用 PJSUA / PJSIP 的 Java 库,并且我正在尝试获取 AudioMedia 来接听电话,但它不起作用。我遵循了 C++ 文档(没有 Java 用于接听电话的文档),这使我实现了以下实现:
public void onCallMediaState(OnCallMediaStateParam param) {
CallInfo ci = this.getInfo();
for(int i = 0; i < ci.getMedia().size(); i++) {
if(ci.getMedia().get(i).getType() == pjmedia_type.PJMEDIA_TYPE_AUDIO) {
AudioMedia aum = (AudioMedia) this.getMedia(i);
}
}
}
第一部分有效,它在呼叫信息中找到类型为 PJMEDIA_TYPE_AUDIO 的媒体,如果我检查 this.getMedia(i)
的类型也是 PJMEDIA_TYPE_AUDIO。但是,当我尝试将其转换为类型 AudioMedia
时,它无法转换。
我假设 SIP 设置的其余部分正常工作,因为当我拨打该号码时,pjsua 报告来电并接听电话,我只是无法将 AudioMedia 设为 send/receive 音频。
该文档是针对 C++ 的,但到目前为止,它与 Java 完全相同,除了 Reference here 这部分。我做错了什么?
找到了!
AudioMedia
有一个用于转换为 AudioMedia 的静态方法 typecastFromMedia(Media media)
。我认为这是因为转换必须发生在底层 C++ 实现中,所以你不能只进行高级 java 转换。
工作示例:
public void onCallMediaState(OnCallMediaStateParam param) {
CallInfo ci = this.getInfo();
for(int i = 0; i < ci.getMedia().size(); i++) {
if(ci.getMedia().get(i).getType() == pjmedia_type.PJMEDIA_TYPE_AUDIO) {
AudioMedia aum = AudioMedia.typecastFromMedia(this.getMedia(i));
}
}
}
您可以使用 getAudioMedia() API 获取 AudioMedia,我的简单 onCallMediaState() 在
SipCall(subclass of Call class) 使用 C++:
void SipCall::onCallMediaState(OnCallMediaStateParam &prm) {
this->callInfo = getInfo();
unsigned media_size = this->callInfo.media.size();
for (unsigned i = 0; i < media_size; i++) {
AudioMedia audioMedia = getAudioMedia(i);
// do something
//...
}
}
我正在使用 PJSUA / PJSIP 的 Java 库,并且我正在尝试获取 AudioMedia 来接听电话,但它不起作用。我遵循了 C++ 文档(没有 Java 用于接听电话的文档),这使我实现了以下实现:
public void onCallMediaState(OnCallMediaStateParam param) {
CallInfo ci = this.getInfo();
for(int i = 0; i < ci.getMedia().size(); i++) {
if(ci.getMedia().get(i).getType() == pjmedia_type.PJMEDIA_TYPE_AUDIO) {
AudioMedia aum = (AudioMedia) this.getMedia(i);
}
}
}
第一部分有效,它在呼叫信息中找到类型为 PJMEDIA_TYPE_AUDIO 的媒体,如果我检查 this.getMedia(i)
的类型也是 PJMEDIA_TYPE_AUDIO。但是,当我尝试将其转换为类型 AudioMedia
时,它无法转换。
我假设 SIP 设置的其余部分正常工作,因为当我拨打该号码时,pjsua 报告来电并接听电话,我只是无法将 AudioMedia 设为 send/receive 音频。
该文档是针对 C++ 的,但到目前为止,它与 Java 完全相同,除了 Reference here 这部分。我做错了什么?
找到了!
AudioMedia
有一个用于转换为 AudioMedia 的静态方法 typecastFromMedia(Media media)
。我认为这是因为转换必须发生在底层 C++ 实现中,所以你不能只进行高级 java 转换。
工作示例:
public void onCallMediaState(OnCallMediaStateParam param) {
CallInfo ci = this.getInfo();
for(int i = 0; i < ci.getMedia().size(); i++) {
if(ci.getMedia().get(i).getType() == pjmedia_type.PJMEDIA_TYPE_AUDIO) {
AudioMedia aum = AudioMedia.typecastFromMedia(this.getMedia(i));
}
}
}
您可以使用 getAudioMedia() API 获取 AudioMedia,我的简单 onCallMediaState() 在 SipCall(subclass of Call class) 使用 C++:
void SipCall::onCallMediaState(OnCallMediaStateParam &prm) {
this->callInfo = getInfo();
unsigned media_size = this->callInfo.media.size();
for (unsigned i = 0; i < media_size; i++) {
AudioMedia audioMedia = getAudioMedia(i);
// do something
//...
}
}