Android调用Jlibrtp库实现RTP发送数据
来源:互联网 发布:网络彩票 编辑:程序博客网 时间:2024/06/07 03:07
Android调用Jlibrtp库实现RTP发送数据
如果你也在Android端做RTP发送数据的话,通过网上查找资料,相信你不难发现,在使用RTP/RTCP协议发送数据是有现成的库进行调用的,Jlibrtp这个库就是Java实现的,但是这个库是没有说明文档的,比较抠脚,而且百度谷歌找到例子又很少,基本上都没什么卵用;一般搜到都是Jrtplib库,这是C实现库,对我们没多大用,除非你愿意先研究这个库的RTP实现,在用JNI调用,明显更蛋疼。这个没文档就只能自己瞎倒腾一下,还好勉强倒腾出来了。
首先,你必须下一个Jlibrtp库:http://download.csdn.net/detail/ericfantastic/9206693 里面包含Jlibrtp的实现和java调用的Demo。
下完后,新建一个Android工程,将Jlibrtp-0.2.2中的jlibrtp文件夹中的所有.java文件导入工程,全丢到一个新建的jlibrtp包里面,准备工作算是完成,在需要地方直接import这个包,就可以使用了。
简单整理一下Jlibrtp实现RTP的过程:
1、首先建立收发端的会话,调用Jlibrtp库的实时传输会话类RTPSession,该类可以创建一个RTP会话,并设置传输的RTP端口和RTCP端口,以及与RTP包的相关的时间戳数据等。
2、然后通过RTPSessionRegister方法用于添加RTP会话的参与者,同时开启接收包的AppCallerThread线程类,其run方法调用回调函数receiveData,才开始接收RTP包,receiveData函数会去掉RTP包头,直接将RTP负载存入缓存,之后再进行分包的判断。
具体实现过程如下:
1、InitSession.java类初始化会话基础参数,设置目标IP及RTP端口号和RTCP端口号等;
package com.eric.androidrtpsenddata;import java.net.DatagramSocket;import java.net.InetSocketAddress;import jlibrtp.*;/* *@author Eric *@2015-10-23下午3:28:20 */public class InitSession implements RTPAppIntf{public RTPSession rtpSession = null;public InitSession() {DatagramSocket rtpSocket = null;DatagramSocket rtcpSocket = null;try {rtpSocket = new DatagramSocket(8002);rtcpSocket = new DatagramSocket(8003);} catch (Exception e) {System.out.println("发送创建会话异常抛出:"+e);}//建立会话rtpSession = new RTPSession(rtpSocket, rtcpSocket);rtpSession.RTPSessionRegister(this,null,null);//设置参与者(目标IP地址,RTP端口,RTCP端口)Participant p = new Participant("192.168.226.116", 8004, 8005);rtpSession.addParticipant(p);}public void receiveData(DataFrame frame, Participant p){String s = new String(frame.getConcatenatedData());System.out.println("接收到数据: "+s+" , 参与者CNAME: "+p.getCNAME()+"同步源标识符("+p.getSSRC()+")");}public void userEvent(int type, Participant[] participant) {// TODO Auto-generated method stub}public int frameSize(int payloadType) {return 1;}}
2、MainActivity.java中发送数据;
package com.eric.androidrtpsenddata;import android.app.Activity;import android.os.Bundle;/* *@author Eric *@2015-10-12上午8:31:54 */public class MainActivity extends Activity{ @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); /*Thread receiveThread = new Thread(new Runnable() {@Overridepublic void run() {try {receiveData();} catch (Exception e) {e.printStackTrace();System.out.println("RTP接收数据异常:"+e);}}});receiveThread.start();*/Thread sendThread = new Thread(new Runnable() {@Overridepublic void run() {try {openSession();} catch (Exception e) {e.printStackTrace();System.out.println("RTP发送数据异常:"+e);}}});sendThread.start();} //Jlibrtp开启会话发送数据 public void openSession(){InitSession test = new InitSession();long teststart = System.currentTimeMillis();String str = "abce abcd abce abce abce abcd abcd abce " +"abcd abce abcd abce abcd abce abcd abce abcd abce " +"abcd abce abcd abce abcd abce abcd abce abcd abce abcd " +"abce abcd abce abcd abce abcd abce abcd abce abcd abce " +"abcd abce abcd abce abcd abce abcd abce abcd abce abcd " +"abce abcd abce abcd abce abcd abce abcd abce abcd abce " +"abcd abce abcd abce abcd abce abcd abce abcd abce abcd " +"abce abcd abce abcd abce abcd abce abcd abce abcd abce " +"abcd abce abcd abce abcd abce abcd abce abcd abce abcd " +"abce abcd abce abcd abce abcd abce abcd abce abcd abce " +"abcd abce abcd abce abcd abce abcd abce abcd abce abcd " +"abce abcd abce abcd abce abcd abce abcd ";byte[] data = str.getBytes();System.out.println(data.length);int i=0;while(i<data.length) {System.out.println("已发送第"+i+"个字节数组:"+data);test.rtpSession.sendData(data);i++;}long testend = System.currentTimeMillis();System.out.println("发送用时:" + (testend - teststart));System.out.println("结束时间:" + testend);System.out.println("开始时间:" + teststart); } public void receiveData(){ ReceiveData receive = new ReceiveData(); }}Demo运行结果:
附上Demo地址:http://download.csdn.net/detail/ericfantastic/9216101
- 上一篇Android调用JNI的简单实例(附详细步骤)
- 下一篇Android仿微信APP实现源码
- Android调用Jlibrtp库实现RTP发送数据
- Android调用Jlibrtp库实现RTP发送数据
- 使用RTP/RTCP API来发送数据
- 基于jrtplib的rtp数据发送
- RTP格式打包发送H.264数据
- UDP的RTP打包发送数据分析
- 基于jrtplib的rtp数据发送
- c 使用RTP协议发送视频数据
- android----发送soap数据给服务器调用webservice,实现手机归属地查询
- Android发送SOAP数据给服务器调用webservice,实现手机号归属地查询
- Android发送SOAP数据给服务器调用webservice,实现手机号归属地查询
- Android发送SOAP数据给服务器调用webservice,实现手机号归属地查询
- 简单RTP发送类c++实现
- RTP 协议发送接收介绍与实现
- java实现RTP的h264分包发送
- android 通过HTTP协议发送XML数据并调用
- android 通过HTTP协议发送XML数据并调用
- Android开发入门之发送XML数据和调用webservice
- Linux简介
- 色彩搭配速成!3个实用方法帮你全面搞定配色
- 常见的几种设计模式
- 工作中,sqoop导入导出hive,mysql 出现的问题.
- Docker运行以太坊公有链
- Android调用Jlibrtp库实现RTP发送数据
- Mac 使用brew安装ElasticSearch
- 【Redis笔记】10.事务
- 对路径"C\program File(x86)'\web..."的访问被拒绝
- 【Redis笔记】11.连接
- lodash中pick和omit函数介绍
- c++兰不达表达式
- 【c语言】实现打开一个连接描述符,并操作描述符
- POJ 2104K-th Number(可持久化线段树-求第K大)