Android原生的MediaPlayer虽然也可以播放rtsp流媒体,可是却有几秒的延时,不符合实时的要求。于是需要使用第三方库live555来解决这个问题。
1、搭建live555框架
我们先下载源码,然后在eclipse里创建一个新的library工程,在工程jni下创建一个live目录,然后将源码拷贝过来。之后在jni下新建一个Android.mk和Application.mk。
图Android.mk
图Application.mk
2、跑通rtsp client流程
分析源码,我们先将testRTSPClient.cpp从jni/live/testProgs里拷贝出来,放到jni下, 然后新建一个jni_interface.h。
图jni_interface.h
Java_com_live555_ctl_liveRtsp_start、Java_com_live555_ctl_liveRtsp_dosometing这两个接口我们将在testRTSPClient.cpp里实现。
在Java_com_live555_ctl_liveRtsp_start里我们根据传过来的url和progName调用openURL,然后调起主循环doEventLoop。 这个时候,我们可以跑通rtsp client的流程,可以连接server了,可是,接收到的视频数据还没有做处理。
3、接收处理视频数据
在live555的架构里,要说明一下Sink source,这两者的概念及关系:
liveMedia库中Sink就是消费数据的对象,比如把接收到的数据存储到文件,这个文件就是一个Sink。 Source就是生产数据的对象,比如通过 RTP读取数据。数据流经过多个source和sinks。