关闭

牛人对RTSP的android实现

标签: android服务器手机流媒体服务器测试tcp
25977人阅读 评论(20) 收藏 举报
分类:

1.学习rtsp的一点心得   发表于 2011-6-15 


rtsp初步来说分为两阶段:
第一阶段:

客户端和rtsp服务器端进行交互,也就是术语中所说的会话阶段

第二阶段:
流媒体数据交互阶段,将数据按照rtp+rfc3984拆包由流媒体服务器发送到播放器客户端,然后客户端这边重新组包

上面的理解的比较的肤浅,我本人是用VLC和自己写的程序在自己的电脑上做的测试。

现在要跟大家说的核心,是数据发送的协议问题,这个协议指的是UDP还是TCP的Stream模式。

最初我是这样认为的:
RTSP走UDP形式,所以最先开始,我直接在在vlc中调用rtsp://192.168.1.143:2725这样,然后在用JAVA写了个监听程序来监听2725端口,但是压根就没有数据过来,于是我猜测难不成走的是tcp形式,于是我用ServerSocket来监听2725的端口,重新用VLC来了一次,令我惊奇的是,接受到了数据:

ESCRIBE rtsp://120.197.4.28:554/ RTSP/1.0
CSeq: 3
User-Agent: LibVLC/1.1.9 (LIVE555 Streaming Media v2011.01.06)
Accept: application/sdp

后来用wireshark抓包分析了很多码流,得出了结论:
在RTSP的会话阶段用的走的TCP协议,或者专业术语叫RTSP协议,然后具体的到了数据交互的过程中的时候,就走的是UDP的形式了或者专业术语叫做RTP协议.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

2. 如何在手机内部搭建RTSP服务器?   发表于 2011-6-20 

今天给大家讲解下,如何在手机内部搭建RTSP服务器,今天初步了解了下,要实现该功能是完成没有问题的,为此我写了一个小demo:

在之前请大家先看下
http://www.shouyanwang.org.sixxs.org/thread-238-1-1.html

package org.zhangkai.postdata;
import java.io.IOException;

import java.io.InputStream;

...


+++++++++++++++++++++++++++++++++++


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

3. android手机内部RTSP服务器搭建成功   发表于 2011-7-3 

昨天写代码写到23点左右的时候,终于攻克了这个技术难点,成功在手机内部构建了一个RTSP服务器,硬编+硬解完美的结合起来。

在运用的过程中碰到非常多的技术难点。

在这里有一个非常重要的技术难点需要说明下,


2个核心技术

1.SDP会话阶段的交互
这个我已经发表了帖子,我写了一篇文章,叫如何在手机内部构建RTSP服务器

2.然后就是JAVA的RFC3984拆H264数据包,这个我已经开源了,源码就在同一栏目。

这2个文件我分散了,大家自己找吧,找到了就可以实现手机内部硬解,还可以提升自己的技术。


4. Android 手机内部RTSP服务器初步搭建成功  发表于 2011-10-5


再原有代码和live555服务器的基础,经过简单的加工,手机内部RTSP服务器已经能够看到效果了,现在就剩下优化和适配了。因为用DDMS截图,截取的是黑屏,所以没法让大家看效果图呢。


实现这个东东有2个非常大的好处:
1.同时支持N个请求,借助手机内置的VideoView,可以同时实现4-6个ViewoView发送RTSP请求
2.直接调用手机硬件的解码,无需自己写任何解码库
3.简单,对比手机H264解码库而言,这个代码即使再复杂也可以控制在8K左右的代码,目前也就不超过1000行左右的代码量,本人对RTSP服务器经过大量的精减,而且因为手机内部,很多问题压根就不需要考虑,比如最令人烦躁的UDP穿透问题。

5.  Android rtsp 硬解-代码一下载    发表于 2011-10-25 

今天给大家上传一下所谓的android硬解。

其实就是借助VideoView来做给android手机的本地回环地址发送RTSP请求,然后我自己在将H264数据封装为RTSP能够识别的码流,这样VideoView就能够播放成功。


但是其实这个并不能称之为硬解。

因为手机依然是调用opencore的解码库去解码的,其实实质上应该还是软解,但是底层具体怎么整的,我们这里就不猜测了。

目前的代码,我就在自己的三星i9000上测试成功了,其余的都没测试成功过,原因在于RTCP。

客户端判断服务器是否断开的原因就是发送RTCP,然后等待返回RTCP包,如果客户端发送了N次服务器都没返回,那么客户端就认为已经断开了。

这份源码是不全的,但是有一个作用,就是打开 所谓android硬解的大门,对大家有绝对的引导作用.


+++++++++++++++++++++++++++++++++++++++

大牛啊  膜拜其余相关文章地址:http://www.shouyanwang.org.sixxs.org/home-space-do-thread.html

2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2081500次
    • 积分:24146
    • 等级:
    • 排名:第277名
    • 原创:450篇
    • 转载:359篇
    • 译文:5篇
    • 评论:276条
    最新评论