1. sipdroid\src\org\zoolu 中是sip协议栈的实现

2. sipdroid\src\org\sipdroid 中是软电话的实现

3. sipdroid\src\com 中是stun相关的实现

4. sipdroid默认使用的编码格式为G711-A率。

5. 直接用ant debug的方法编译出的程序,只支持A率和U率两种音频编码格式,其他的都需要通过NDK的方法导入后,才能使用。

6. 如果对端终端支持视频的话(如linphone),菜单如下:

保持,静音,

转移 发送视频 挂断

注意:只能发送视频,接收不到对端的视频。

7. 如果对端终端不支持视频的话(如yate),菜单如下:

保持,静音,

转移 挂断

8. sipdroid\src\org\sipdroid\sipua\ui 中的VideoCamera.java,有视频捕获,发送,接收的实现。

9. sipdroid\src\org\sipdroid\sipua\ui 中的CallScreen.java中的 VIDEO_MENU_ITEM 标识了 “发送视频”

10. Activity2.java 实现了跳转到InCallScreen.java

11. class InCallScreenextends CallScreen

12. sipdroid.java 中有“关于 退出 设置”菜单的实现。

在AndroidManifest.xml中,

<intent-filter>

<actionandroid:name="android.intent.action.MAIN" />

<categoryandroid:name="android.intent.category.LAUNCHER" />

</intent-filter>

表明了哪个Activity先启动。

13. 网络传来的音频数据通过AudioTrack类进行播放。

14. 本地的音频数据通过AudioRecord类进行录制。

15. 在本地播放数据包中的视频流,可以先提取位图,再显示。由于系统没有提供直接播放的相关方法。

16. 线程同步的方法 – synchronized

17. F:\sipdroid\res\drawable 中的图标可以更换

18. sipdroid\res\values-zh-rCN 修改【关于】显示框的内容

19

在Sipdroid开源项目像服务器进行数据的发送统一是由SipProvider的sendMessage,因为首先得知道是什么连接 是UDP啊,还是TCP,然后就是message的封装

20.

是无连接的包投递服务,为什么是无连接呢,客户端和服务器压根就没有建立连接,服务器只是开放了端口来接受数据,有了就接受,没有就悬挂阻塞.

21双边的视频观看,走的还是数据报包,有数据报包的ip和端口就行了

22 但是Sipdroid可以直接的从MediaRecord里面已经生成好的视频数据中提取出H264/H263的数据,这些数据已经经过了相应的编码

23如何观看视频:

mVideoFrame.setVideoURI(Uri.parse("rtsp://"+Receiver.engine(mContext).getRemoteAddr()+"/"+

Receiver.engine(mContext).getRemoteVideo()+"/sipdroid"));

24 通过内置的videoview来通过RTSP来进行播放,那么也就是说服务器会将传递的RTP的视频数据流封装成RTSP的流传递给手机的videoview来实现观看,同样也不需要解码库,

所以Sipdroid开源代码里只有声音的编码库,没有视频的编码库.

25

最好的实现该软件的方法是,借助Android的MediaRecorder实时提取出H263/H264数据,然后经过RTP封装传给RTSP服务器,这种实现方式最理想,通过获取onPrewFrame来获取预览帧编码,无论怎么弄,不可避免的,延时,丢帧各种情况都会让你非常的棘手

2、SipDroid流程分析:
    拨号:拨号请求由UI通过Receiver广播信息交给SipDroidEngine处理,在SipDroidEngine做一些验证,然后交给UserAgine处理。其中call(String target_url, boolean send_anonymous)为判断是否匿名拨号再此方法中,会创建一个ExtendedCall对象,以提供给sip协议栈使用,然后调用ExtendedCall的call方法处理,之后由ExtendedCall的call,调用ExtendedInviteDialog来发送invite请求。由InviteDialog执行具体的invite调用InviteTransactionClient的request方法,最后由InviteTransactionClient发送request请求,在InviteTransactionClient中会通过SipProvider,来发送消息,并打开对端口监听,来收sip消息。发送消息主要有(UDP传输 UdpTransport  TCP传输TcpTransport)
来电:在启动程序的时候会通过SipDroidEngine会根据配置,创建一个Provider,这里用到udp传输,创建一个Udpprovider,udpprover是一个Thread,创建的时候就会启动线程,开始监听收到的信息,当受到信息后,通过onServiceTerminated方法,把对象传出到UdpTransport,由UdpTransport处理,再通过onTransportTerminated方法传出到SipProvider对象,最后将在SipProvider的processReceivedMessage方法中处理收到的消息,最后从listeners(map)中取出相应的listener,最后通过相应的listener中的OnReceiveMessage()来处理具体Sip请求

android网络电话源码相关推荐

  1. quado编辑Android代码步骤,Ubuntu11.10下编译android内核源码

    编译android源码时并不会自动编译android内核,因此需要手动编译这部分代码.编译内核所用的时间比编译android源码要少得多,只需一会就编译完成. 1.确定内核版本 进入存放android ...

  2. android intent 源码,Android 基础之 IntentService 源码

    Android 基础之 IntentService 源码 Android,IntentService,源码 IntentService 位于 android.app 包下面,是 Service 的一个 ...

  3. android view 源码分析,Android ViewPager源码详细分析

    1.问题 由于Android Framework源码很庞大,所以读源码必须带着问题来读!没有问题,创造问题再来读!否则很容易迷失在无数的方法与属性之中,最后无功而返. 那么,关于ViewPager有什 ...

  4. 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

    作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...

  5. 在Eclipse中查看Android SDK源码

      很多时候我们需要查看Android SDK源码来更好的了解API和分析问题. SDK 源码 从Android4.0开始在AndroidSDK Manager中就为我们提供了SDK源码下载,打开Ec ...

  6. Android FrameWork学习(二)Android系统源码调试

    点击打开链接 通过上一篇 Android FrameWork学习(一)Android 7.0系统源码下载\编译 我们了解了如何进行系统源码的下载和编译工作. 为了更进一步地学习跟研究 Android ...

  7. [HOW TO]-下载android官方源码

    介绍下载android官方源码的方式: 使用每月更新的初始化包 传统初始化方法 1.使用每月更新的初始化包 下载初始化包->repo sync wget -c https://mirrors.t ...

  8. Android Lifecycle源码解析(一)

    Android Lifecycle源码解析(一) 首先我们看HomeActivity中我们添加到一行代码 public class HomeActivity extends AppCompatActi ...

  9. 分享10个Android游戏源码,要的赶紧来哈

    Android扫雷游戏源码 Android游戏掩码分享之经典的坦克游戏 Android源码分享人机对战 五子棋代源码 绝对给力 一个模拟模仿筛子的android游戏 Android游戏源码分享之俄罗斯 ...

最新文章

  1. 流水账(4)---礼拜二---“抗议,我不是电工!”
  2. Charles 河畔的大圆顶
  3. 5G 承载网 — 基于 SDN 的 5G 承载网
  4. mongodb,redis,mysql 简要对比
  5. supervisord管理进程详解
  6. 录制视频显示的视频角度和拍摄角度保持一致
  7. lg gw880 qq2011 android beta4版,LG GW880评测:CMMB天线、细节设计
  8. POJ 2287 田忌赛马(贪心)
  9. 基本程序 打印Scala的Hello World
  10. 教你两种数据库覆盖式数据导入方法
  11. testbench实例 vhdl_testbench_testbench如何加载_vhdl testbench reset(5)
  12. java如何删除文件夹_Java如何删除文件夹和子文件夹
  13. 现代雷达系统分析与设计---数字中频正交采样
  14. DNF的SPK文件解析笔记
  15. 什么是TensorFlow
  16. 【Kotlin -- 知识点】Kotlin 中的委托
  17. 根据图片原型写一个html页面,如何分分钟开发高保真交互原型_html/css_WEB-ITnose
  18. 使用three.js做一个网页的相册动画
  19. Minecraft 从入门到入坑(边玩游戏边学编程)
  20. python中save是什么意思_Python中的numpy.save()和joblib.dump()有什么区别?

热门文章

  1. 硬启动各种PPC的方法
  2. visifire 控件
  3. MT6167 RF芯片资料,MT6167参考设计下载
  4. hdu 1176 免费馅饼(DP)
  5. QQ找茬辅助源码下载
  6. 华为HG8245光纤终端及开路由
  7. wireshark+网管交换机抓包教程
  8. 《Flutter 控件大全》第九十六:TextField、EditableText、TextInput
  9. 近期Android错误
  10. 为什么你的设计总是得不到有效的练习?进步都不大呢?