live555源码阅读一

实现播放 MP3 的 RTSPServer 的基本过程:
1、首先,创建一个 RTSPServer 实例,侦听 554 或 8554 端口,等待一个客户端的 RTSP 请求;
2、在收到一个客户端的 RTSP 请求后,创建一个 RTSPClientSession 实例,用于处理 RTSP 交互过程;
3、RTSPClientSession 实例在响应 RTSP DESCRIBE 命令时,将根据MP3文件名创建一个 ServerMediaSession (SMS会话)实例并将其加入到 RTSPServer 的流媒体会话集合(fServerMediaSessions)中,同时根据将要播放的文件的类型,创建一个 MP3AudioFileServerMediaSubsession (SMS子会话)实例,并将 SMS子会话 添加到 SMS会话 中;
4、RTSPClientSession 实例在响应 RTSP SETUP 命令时,将 SMS会话 和 SMS子会话 同当前客户端会话关联起来,再调用 SMS子会话 的
接口(getStreamParameters)创建一个读取 MP3 文件的 MP3FileSource 实例(播放源),以及一个将 MP3 流媒体数据帧封装到 RTP 包并从 RTP 端口发送出去的 RTPSink 实例(处理槽);
5、RTSPClientSession 实例在响应 RTSP PLAY 命令时,调用 SMS子会话 的接口设置好播放速度(setStreamSourceScale)和起始播放位置(seekStreamSource),最后再调用 SMS子会话 的接口(startStream)开始播放 MP3 ;
6、在 SMS子会话 的播放接口(startStream)里,实际调用到了 RTPSink 实例上的播放接口(startPlaying), RTPSink 实例再调用 MP3FileSource 实例的接口(getNextFrame)从 MP3 文件循环读取一帧帧的数据,
然后将其封装到 RTP 包中从 RTP 端口发送出去。

 

在RTSP服务器端,Source相当于从流媒体文件读取数据的工具,Sink相当于将Source读取到的一帧帧数据封装成一个个RTP包并发送出去的工具。个人认为,之前从网上看到的Source和Sink概念理解起来太抽象,对于刚接触live555的人来说太费劲。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值