基于linphone android sdk 的voip语音、视频通话 教程二、sip语音拨打、接听

Android SIP软电话,通话录音,VoIP电话,linphone电话 项目中实现了两种通话录音, 调用系统的拨号功能,检测通话状态,接通、挂断来决定开始录音和停止录音 方式二:SIP软电话,集成linphone框架的VoIP网络电话,实现网络通话并录音, 项目详解连接:https://blog.youkuaiyun.com/m13984458297/article/details/127534688 立即下载

如果觉得下面的麻烦可以直接到https://item.taobao.com/item.htm?id=587133228080获取源码。源码功能性更好、更完善。

想测试apk请加群261074724 

最新的sdk4教程地址  https://blog.youkuaiyun.com/Java_lilin/article/details/84842314

在前一篇我写了关于sip注册的 可以参考https://blog.youkuaiyun.com/Java_lilin/article/details/80539116

1.在实现拨打之前我们先把注册状态显示到view上 

让LinphoneMiniManager extends Service 便于发送消息到MainActivity.java 别忘了AndroidManifest.xml的注册service

    <service android:name=".LinphoneMiniManager"></service>

在把manger的代码改改

public LinphoneMiniManager(Context c) {
		mContext = c;
		LinphoneCoreFactory.instance().setDebugMode(true, "Linphone Mini");

		try {
			String basePath = mContext.getFilesDir().getAbsolutePath();
			copyAssetsFromPackage(basePath);
			mLinphoneCore = LinphoneCoreFactory.instance().createLinphoneCore(this, basePath + "/.linphonerc", basePath + "/linphonerc", null, mContext);
			initLinphoneCoreValues(basePath);

			setUserAgent();
			setFrontCamAsDefault();
			startIterate();
			mInstance = this;
	        mLinphoneCore.setNetworkReachable(true); // Let's assume it's true
		} catch (LinphoneCoreException e) {
		} catch (IOException e) {
		}
	}



//上面的改为

private LinphoneCoreFactory lcFactory;
	 public static boolean isReady() {
	        return mInstance != null;
	 }
	 
	@Override
	public void onCreate() { 
		super.onCreate();
		 
		mContext = this;
		lcFactory = LinphoneCoreFactory.instance();
		lcFactory.setDebugMode(true, "lilinaini 1"); 
		try {
			String basePath = mContext.getFilesDir().getAbsolutePath();
			copyAssetsFromPackage(basePath);
			mLinphoneCore = lcFactory.createLinphoneCore(this, basePath + "/.linphonerc", basePath + "/linphonerc", null, mContext);
			initLinphoneCoreValues(basePath);

			setUserAgent();
			setFrontCamAsDefault();
			startIterate();
			mInstance = this;
	        mLinphoneCore.setNetworkReachable(true); // Let's assume it's true
		} catch (LinphoneCoreException e) { 	} catch (IOException e) { }
		
	}

	public static LinphoneMiniManager getInstance() {
		return mInstance;
	}
	public static LinphoneCore getLC() {
		if(null==mInstance){ return null; }
		return mInstance.mLinphoneCore;
	}

完了在activity_main.xml添加显示的文本

   <TextView
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:id="@+id/id_text_status"
        android:textSize="20dip"
        android:text="状态" />

在MainActivity.java添加广播接受者并在onCreate注册

public class MainActivityReceiver extends BroadcastReceiver { 
        @Override
        public void onReceive(Context context, Intent intent) {
             String action = intent.getStringExtra("action");
             switch (action) {
             case "reg_state":
                 id_text_status.setText(intent.getStringExtra("data") );
                break;  
            default:
                break;
            } 
        }
    }

public static final String RECEIVE_MAIN_ACTIVITY = "receive_main_activity";
    private MainActivityReceiver mReceiver;

    protected void onCreate(Bundle savedInstanceState) { 

。。。

   //广播
       IntentFilter intentFilter = new IntentFilter(RECEIVE_MAIN_ACTIVITY);
       mReceiver = new MainActivityReceiver();
       registerReceiver(mReceiver, intentFilter); 

。。。

}

再到LinphoneMiniManager.java里面的

@Override
    public void registrationState(LinphoneCore lc, LinphoneProxyConfig cfg,
            RegistrationState cstate, String smessage) {
        //Log.e("lilin Registration state: " + cstate + "(" + smessage + ")");
        Intent intent = new Intent(MainActivity.RECEIVE_MAIN_ACTIVITY);
        intent.putExtra("action", "reg_state");intent.putExtra("data",smessage );
        sendBroadcast( intent); 

}

重新启动就可以看到注册的状态了

2.实现拨打电话

<Button 
            android:layout_width="wrap_content"
            android:layout_marginTop="5dip"
            android:layout_height="wrap_content"
            android:id="@+id/id_btn_boda"
            android:text="语音拨打"
        />

在MainActivity.java添加实现点击

    instance.lilin_call(id_etext_dail.getText().toString(),host,false);

 

在LinphoneMiniManager.java添加方法

public void     lilin_call(String username,String host,boolean isVideoCall) throws LinphoneCoreException{
        LinphoneAddress address = mLinphoneCore.interpretUrl(username+ "@" + host);
        address.setDisplayName(username);
          
        LinphoneCallParams params = mLinphoneCore.createCallParams(null);
        if (isVideoCall) {
            params.setVideoEnabled(true);
            params.enableLowBandwidth(false);
        } else {
            params.setVideoEnabled(false);
        } 
        LinphoneCall call = mLinphoneCore.inviteAddressWithParams(address, params);
         if (call == null) {
               Log.e("lilin error", "Could not place call to " + username);
               return;
          } 
    }

好了  注册成功后  可以点击拨打了  测试的话找另外一个sip 客户端接听就行了

3. 接听

 

  <Button 
            android:layout_width="match_parent"
            android:layout_marginTop="5dip"
            android:layout_height="wrap_content"
            android:id="@+id/id_btn_jie"
            android:text="接电话"
        />

点击事件

instance.lilin_jie();

在LinphoneMiniManager.java添加方法

public void lilin_jie() throws LinphoneCoreException{ 
         
        //instance.getLC().setVideoPolicy(true, instance.getLC().getVideoAutoAcceptPolicy());/*设置初始话视频电话,设置了这个你拨号的时候就默认为使用视频发起通话了*/
        getLC().setVideoPolicy(getLC().getVideoAutoInitiatePolicy(), true);/*设置自动接听视频通话的请求,也就是说只要是视频通话来了,直接就接通,不用按键确定,这是我们的业务流,不用理会*/
        /*这是允许视频通话,这个选了false就彻底不能接听或者拨打视频电话了*/
        getLC().enableVideo(true, true);
        LinphoneCall currentCall = getLC().getCurrentCall();
        if (currentCall != null) {
            LinphoneCallParams params = getLC().createCallParams(currentCall);
            getLC().acceptCallWithParams(currentCall,params );     
        } 
    }

铃声需要将

private void initLinphoneCoreValues(String basePath) { 

 。。。
        mLinphoneCore.setRing( basePath + "/oldphone_mono.wav");//null gai

。。。

}

好了  现在可以更具注册的 接听电话

未完待续  更多到博客列表

对此感兴趣的可以加群261074724 

 

 

 

 

 

 

免费的VOIP网络电话,Android平台SIP客户端 免费的VOIP网络电话,Android平台SIP客户端 支持服务端: Cisco CallManager, OpenSER, Kamailio, OpenSIPS, Asterisk, Radvision, Nortel, Avaya等等 支持语音编码: G.711 aLaw/uLaw, G.722.1, G.722, SPEEX, SPEEX-WB, AMR-WB, GSM, iLBC, G723.1, G.729. 支持视频编码: H.263, H.264 通话录音: 录制成wav格式. 适配屏幕: QVGA, WVGA, WQVGA 回音消除(AEC): Acoustic Echo Cancellation 自动增益(AGC): Automatic gain control 舒适噪声产生(CNG): Comfort Noise Generation 静音检测(VAD): Voice Activity Detector 呼叫转移,呼叫挂起,MIC静音,内外放切换 免打扰模式(DND), 自动接听(AA). 支持STUN support, Outbound proxy server, Qos Support TLS/SRTP(usually use to avoid SIP blocking) 支持SIP协议中的 INFO & OPTIONS 消息. Message Waiting Indicator(MWI) 支持DTMF: 发送DTMF tone(RFC2833 and SIP INFO), 检测DTMF tone(RFC2833 and SIP INFO). 立即下载

相关推荐

android-client:适用于Android的SIP客户端(基于CSipSimple)

Android客户端 这是一个基于CSipSimple的SIP软件电话,旨在自动执行ng-voice帐户的配置。 它由一系列类组成,这些类能够使用一次性登录通过HTTPS连接到REST API,以获取每个帐户以及在软件电话上创建本地SIP帐户所需的信息。 该项目正在进行中。 特征 除了Csipsiple软电话的众所周知的功能之外,此自定义版本还具有: 使用唯一登录凭据的一键配置 每个帐户都是自动配置的。 特别适合那些不习惯SIP术语的人 NB和WB的自定义编解码器列表选择 使用Google Cloud Messaging的移动推送通知。 这使我们能够触发配置重新加载,按需注册和注销等。 自动唤醒以在需要时接听电话(使用GCM) 通过读取QR码自动加载配置(零输入配置) 视频插件默认启用 屏幕截图

FFmpeg4.3系列之28:SIP+eXosip+pjsip小白入门

敬告:该系列的课程在抓紧录制更新中,敬请大家关注。敬告: 该系列的课程涉及:FFmpeg,WebRTC,SRS,Nginx,Darwin,Live555,等。包括:音视频、流媒体、直播、Android、视频监控28181、等。我将带领大家一起来学习:学习sip协议的基本原理、流程、结构;编译开源库源码osip,eXosip,pjsip(包括windows和Linux两套环境);使用eXosip或pjsip进行案例实战;具体内容包括:  1.sip协议讲解,包括原理、结构、协议内容、流程分析等。2.osip与eXosip的源码编译,使用eXosip进行案例实战并详解流程。3.pjsip的源码编译,使用pjsip进行案例实战并详解流程。

JAVA版SIP电话

java版本的sip软电话。本地安装SIP服务(比如freeswitch)之后,导入源码,运行 net.sourceforge.peers.gui.MainFrame类中的main函数。设置账号(1001),密码(1234),domain(192.168.1.10)。即可注册。亲测有效...

简易实现linphone的SIP电话功能

​​​​​​最近公司由于发展需要,希望能通过SIP通话的方式来替代传统的电话模式,先简单介绍一个SIP。SIP(Session Initiation Protocol,会话初始协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议。它是一个基于文本的应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。SIP 是一种源于互联...

qq_29248115的博客 4125

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

基于SIP协议的Android端IP电话APP

该程序是基于SIP协议的Android端IP电话APP源代码,对开发Android电话应用的开发者有很大的帮助。

常用主流sip协议软电话客户端软件有哪些?—— 筑梦之路

Ekiga,原名GnomeMeeting,支持Windows和Linux,是一个兼容SIP和H.323的视频会议程序,兼容VoIP,IP电话,通过Ekiga可以与使用任何SIP和H.323软硬件的远程用户进行视频和音频对话。Grandstream出品的免费的Android和iOS上的客户端。支持会议(6人会议)、短信、sip信息跟踪等,视频支持H.264。Polycom出品,商业软件,支持Windows、Mac、Android、iOS。移动版是免费的。支持视频与会议,支持SIP和H.323.

筑梦之路 1万+

Android应用源码SIPVoIP客户端【源代码】-IT计算机-毕业设计.zip

Android应用源码开发Demo,主要用于毕业设计学习。

Android 使用Linphone SDK开发SIP客户端

Android 使用Linphone SDK开发SIP客户端

weixin_42602900的博客 3343

基于Android的SIP软交换系统手机客户端

结合Android平台的NDK集合,设计及开发了在Android平台上使用SIP协议的软件使之能通过SIP软交换服务器进行通话,并针对性地提出以太网数据包的过滤策略,完善了数据包解析模块,实现了SIP软交换系统的功能扩展。系统将C语言开发的模块全部改用跨平台的Java来编写,较传统的SIP软交换系统而言,其可移植性更强。

从零开始搭建一个高性能电流镜:手把手教你设计Wide-Swing Cascode结构

本文详细解析了Wide-Swing Cascode电流镜的设计原理与实战流程。针对低压高性能模拟电路设计的核心挑战,文章手把手指导如何从理论分析、参数计算到仿真验证,搭建一个兼具高输出阻抗和低输出电压裕度的电流镜结构,并深入探讨了偏置电路生成、性能优化及版图匹配等关键要点。

weixin_29294975的博客 622

请编写一个sip Android音视频客户端

编写一个SIP客户端需要以下步骤: 了解SIP协议: SIP(Session Initiation Protocol)是一种通信协议,用于建立、维护和终止多媒体会话(如语音和视频通话)。 选择开发工具: 可以使用Java语言和Android Studio开发安卓应用程序。 获取SIP栈: 可以使用现有的SIP栈库,如pjsip,或开发自己的SIP栈。 设计界面: 可以使用Android的X...

weixin_35755434的博客 405

用Arduino和MAX30102做个心率血氧仪,从硬件连线到算法调试全流程避坑

本文详细介绍了如何使用Arduino和MAX30102传感器构建高精度心率血氧仪,涵盖硬件连线、软件配置、信号处理及算法优化全流程。通过实战案例和避坑指南,帮助开发者快速实现临床级精度的健康监测设备,适用于可穿戴设备和医疗健康领域。

weixin_26897585的博客 383

Android开源SIP协议栈比较

https://blog.youkuaiyun.com/yujihu989/article/details/78215537

phymat.nico的专栏 646

iOS中.obj、.usdz、.dae和.scn格式之间的转化(思路清晰版)

作者最近在写项目的过程中遇到了一些3d模型格式问题,故写下这篇文章记录一下解决问题的过程。

yueliangmua的博客 5586

MacOS M芯片部署ComfyUI:从环境排雷到插件生态一站式指南

本文为MacOS M系列芯片用户提供了一份详尽的ComfyUI部署指南。文章深入剖析了因架构差异导致的常见安装报错根源,并给出了基于MPS后端的正确PyTorch安装命令。从创建纯净Python虚拟环境、分步安装依赖,到验证GPU加速,手把手指导完成部署。同时,还推荐了包括管理器、汉化在内的必备插件,以完善使用生态,帮助用户一站式解决从环境搭建到效率提升的所有问题。

weixin_29261711的博客 992

android 软电话 开发包-JNI 封装 SIP 协议,可进行二次开发应用于VOIP

android 软电话 开发包-JNI 封装 SIP 协议,可进行二次开发应用于VOIP 该开发包为android平台下的JNI开发包,符合标准SIP协议,支持G729语音编码。 下载地址:源代码地址 apk地址 提供完整的二次开发的demo代码,包含以下接口: //设置本机IP地址 private native in

VVSIP官网博客 3563

开源网格划分软件-Gmsh二次开发教程 (4)网格生成与控制​

​本章将深入讲解Gmsh的网格生成技术,包括全局/局部网格控制、边界层生成、自适应细化等,并提供完整的代码示例。

ZQGG的博客 1472

Android自带SipDemo详解 <4>

会话发起协议 Android提供了一个支持会话发起协议(SIP)的API,这可以让你添加基于SIP的网络电话功能到你的应用程序。Android包括一个完整的SIP协议栈和集成的呼叫管理服务,让应用轻松无需管理会话和传输层的沟通就可设置传出和传入的语音通话,或直接音频记录或播放。 以下类型的应用程序可能使用SIP API: 视频会议。 即时消息。 条件和限制 以下是开发一个SIP应用程...

FLY_THINK2012的博客 419

C# Socket网络通信UDP(关键字:Socket)

简单Socket-Udp通信 在本文中涉及到通信,仅做简单的通信(服务端接受消息,由客户端发出消息) 如有需要,根据需求可直接copy使用 关键字Socket 需要引用命名空间: using System.Net; using System.Net.Sockets; 服务端: using System; using System.Net; using System.Net.Sockets; u...

MelanceXin的博客 3884

Three.js 完整实战项目:构建一个 3D 商品展示空间

Three.js 作为强大的 WebGL 框架,广泛应用于交互式 3D 场景开发,尤其适合创建沉浸式商品展示空间。本文将通过一个完整的实战项目,展示如何构建一个 3D 商品展示空间,涵盖项目架构、资源组织、多模型切换、交互热点绑定、移动端适配和帧率优化。项目以展示虚拟商品(如家具或电子产品)为核心,结合用户交互,基于 Vite、TypeScript 和 Tailwind CSS,支持 ES Modules,确保响应式布局,遵循 WCAG 2.1 可访问性标准。本文适合希望通过综合项目掌握 Three.js

zimin的专栏 1462

voip sip csipsample CSipSimple是一款可以在android手机上使用的支持sip的网络电话软件--谷歌开源软件

[Android 中级]Voip之CSipSimple类库的编绎 CSipSimple是什么?是一款基于pjsip的Android客户端,相信想要研究VOIP通讯的朋友一定不会陌生,这里我就把如何编译CSipSimple写下来。 首先从CSipSimple官方网站上把所有Android源码下载下来。 Mac上直接打开终端 输入 svn checkout http:

771

[Dify] 如何构建一个带评分功能的 Dify AI 教练系统

本文介绍如何利用Dify开源平台构建具备自动评分功能的AI教练系统。系统通过Prompt设计AI教练角色,使用OpenAPI定义评分工具接口,结合工作流编排实现提问、回答收集、评分和反馈的全流程。文章详细讲解了从AI教练身份设定、多维度评分标准设计到前端可视化展示的实现方法,并提供了可扩展建议,适用于语言训练、面试模拟等多种场景。该系统展示了Dify平台在构建智能化评估应用方面的优势,实现零代码开发专业AI教练解决方案。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 332
上一篇: 基于linphone android sdk 的voip语音、视频通话 教程三、视频通话
下一篇: 字符云在线创作
java_lilin
博客等级 码龄14年 364粉丝 124原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值