当前位置: 首页 > 知识库问答 >
问题:

使用 PJSUA 在Android中录制窃听电话

颜熙云
2023-03-14

我正在开发一个内部录音的sip应用程序。我需要双方的音频是在移动本身内部记录器。

阅读有关相同的博客和文章。我知道唯一的解决方案是使用 NDK。经过巨大的努力,我编译并集成了 pjsip/pjsua2 到我的应用程序中,客户端注册和调用可以正常工作。但是,无法记录通话。我尝试过pjsua的音频媒体录像机,但由于没有适当的文档,我什么都不懂。

@Override

公共void onCallMediaState(OnCallMedicaStateParam prm)

{

Log.i(TAG, "onCallMediaState: ");
CallInfo ci;
try {
    ci = getInfo();
} catch (Exception e) {
    return;
}

CallMediaInfoVector cmiv = ci.getMedia();
for (int i = 0; i < cmiv.size(); i++) {
    CallMediaInfo cmi = cmiv.get(i);
    if (cmi.getType() == pjmedia_type.PJMEDIA_TYPE_AUDIO && (cmi.getStatus() == pjsua_call_media_status.PJSUA_CALL_MEDIA_ACTIVE)) {
        try {

            am = getAudioMedia(i);
            audioMediaRecorder.createRecorder("callaudio.wav");
            am.startTransmit(audioMediaRecorder);

            MyApp.ep.audDevManager().getCaptureDevMedia().
                    startTransmit(am);
            am.startTransmit(MyApp.ep.audDevManager().
                    getPlaybackDevMedia());
        } catch (Exception e) {
            System.out.println("Failed connecting media ports" +
                    e.getMessage());
            continue;
        }
    }
}
MyApp.observer.notifyCallMediaState(this);

}

这是我的音频文件。wav文件已保存?我怎样才能得到它?

上面的代码生成了这样一个日志-

pjsua_媒体。c…呼叫1:更新媒体。。

pjsua_media. c……媒体流call 01:0被销毁

pjsua_aud. c……音频频道更新…

strm0x953fe014…… VAD暂时禁用

strm0x953fe014……编码器流开始

strm0x953fe014…..解码器流已启动

pjsua_media.c....音频已更新,流 #0:PCMA(发送)

我的呼叫:onCallMediaState:

pjsua_aud. c…创建记录器myfilename.wav.。

pjsua_aud.c....无法打开文件进行录制:只读文件系统 [status=120030]

媒体cpp…pjsua_recorder_create(

连接媒体端口失败标题:pjsua_recorder_create(

代码:120030

说明: 只读文件系统

位置:。。媒体.cpp:443 15:52:01.458
pjsua_core.c ....TX 940 字节 响应消息 200/INVITE/cseq=1 (tdta0x96976064) 到 UDP 218.248.233.142:5060:

共有1个答案

戚宏浚
2023-03-14

您应该指定一个确切的文件夹

 File root = Environment.getExternalStorageDirectory();

 // Specify a directory for your recordings
 File dir = new File(root.getAbsolutePath() + File.separator + "PJSIP-Recordings");

 // Ensure that the directory exists
 dir.mkdirs();

 audioMediaRecorder.createRecorder(dir.getAbsolutePath() + File.separator + "callaudio.wav"); 

这将保存在PJSIP Recordings文件夹下的根文件夹中(您可以将其更改为您想要的任何内容)。

此外,请确保您请求了存储权限。

 类似资料:
  • 我想做一个应用程序,记录来电和去电,它会自动运行,当用户得到或作出任何呼叫。

  • 我需要在我的android应用程序中记录电话。我试过使用MediaRecorder,将AudioSource设置为MIC、VOICE_COMMUNICATION、VOICE_CALL和其他选项。但它们都没有记录通话。有人能建议在android中记录电话的任何解决方案吗? 以下是我试用过的代码。但它不记录通话。只记录通话前后的语音。请建议任何解决方案。 开始录制的代码 获取输出文件文件名的代码 停止

  • 我正在开发一个用于录制通话的应用程序。这是我的代码片段。 这适用于android 7以下的设备,但当我使用Android 7移动设备时,我只能听到传出的声音,但听不到传入的声音。 有人能帮我修理它吗?

  • 我正在使用带有Apache骆驼的Spring Boot。我正在从控制器调用路由。一旦路由完成,控制就会返回控制器。我正在VerifyLimitProcess和批准限制处理器中生成响应。如果我没有在路由中提供窃听配置,控制器会按预期检索标头和正文。但如果我在路由中引入窃听,控制器会将标头和正文接收为null。如果有人指出我需要做什么,以便我可以在选择语句中引入两个处理器的窃听配置,即VerifyLi

  • 我正在开发一个可以在Android系统中记录通话的应用程序。我读过很多讨论通话记录问题的话题。我知道不是所有的Android手机都可以记录通话。但是我想知道如何记录通话,这是游戏市场上最受欢迎的应用程序,比如https://play.google.com/store/apps/details?id=com.appstar.callrecorder或https://play.google.com/s

  • 我测试了这个帖子的答案,但它也不起作用:在Android6.0中接听来电 IncomingActivity: