我正在将Java库用于PJSUA / PJSIP,并且试图获取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的媒体,如果我检查了也是PJMEDIA_TYPE_AUDIO的this.getMedia(i)类型。但是,当我尝试将其强制转换为AudioMedia时,将无法强制转换。

我假设其余的SIP设置都可以正常工作,因为当我拨打该号码时,pjsua报告来电并接听电话,我只是无法使AudioMedia发送/接收音频。

该文档是针对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));
        }
    }
}

07-24 09:39