第一部分主要写思路,
介绍几个概念(网上有很多,简单介绍):
RTSP:实时流传输协议,应用层协议,
作用:发起/终结流媒体,只用于控制媒体流的传输
RTP: RTP/RTCP一起使用,往往建立在UDP协议上,实行有序传送
作用:传输流媒体数据,RTCP对RTP进行控制,同步
RTSP消息格式:
响应消息头:
RTSP协议上的简单交互:
其中获取文件的大小,通过DESCRIBE,RTP端口号通过SETUP协商得到,一般取服务器发过来的最小的
上述的过程只是标准的、友好的rtsp流程,但实际的需求中并不一定按此过程。
其中第三和第四步是必需的!第一步,只要服务器客户端约定好,有哪些方法可用,则option请求可以不要。第二步,如果我们有其他途径得到媒体初始化描述信息(比如http请求等等),则我们也不需要通过rtsp中的describe请求来完成。第五、六步,可以根据系统需求的设计来决定是否需要
主要作用:建立连接,请求播放
RTP协议上:建立好了连接,传输数据通过RTP
VLC:有了数据之后,下载到本地,在VLC播放器上播放,播放器的控制通过RSTP,VLC解码文件:
libvlc_new():创建libvlc_instance_t。
libvlc_media_new_path():创建libvlc_media_t。
libvlc_media_player_new_from_media():创建libvlc_media_player_t。
libvlc_media_player_release():释放libvlc_media_player_t
libvlc_media_release():释放libvlc_media_t。
libvlc_release():释放libvlc_instance_t
libvlc_media_player_play():播放。
libvlc_media_player_pause():暂停。
libvlc_media_player_stop():停止。
以上基本介绍了流媒体播放中一些概念,
下面梳理一下过程:
建立SOCKET连接-->发RTSP消息-->RTP传输数据-->VLC上播放-->释放资源
其中几点需要注意的关键点:
RSTP中 :1、在客户端如何解析,把RTSP格式组成字符串通过Socket接收然后解析,服务端通过LIVE555解析。
2、session作用,每个RTSP协议中都会有session,保证是改连接
RTP中:使用UDP协议,会存在缓冲区,当暂停时,播放器会把缓冲区的数据继续播放,造成一定的延时,因此暂停需要暂停本地数据