基于FFmpeg接收RTSP的ts流

 

RTSP用于建立的控制媒体流的传输,通过wireshark抓包可以看到rtsp消息交互的过程:

1. 第一步:查询服务器端可用方法

C->S:OPTION request     // 询问S有哪些方法可用

S->C:OPTION response    // S回应信息的public头字段中包括提供的所有可用方法过程

 

2. 第二步:得到媒体描述信息

C->S:DESCRIBE request   // 要求得到S提供的媒体描述信息

S->C:DESCRIBE response  // S回应媒体描述信息,一般是sdp信息

 

3. 第三步:建立RTSP会话

C->S:SETUP request    // 通过Transport头字段列出可接受的传输选项,请求S建立会话

S->C:SETUP response   // S建立会话,通过Transport头字段返回选择的具体转输选项,并返回建立的Session ID

 

4. 第四步:请求开始传送数据

C->S:PLAY request    // C请求S开始发送数据

S->C:PLAY response   // S回应该请求的信息

 

5. 第五步: 数据传送播放中

S->C:发送流媒体数据  // 通过RTP协议传送数据

 

6. 第六步:关闭会话,退出

C->S:TEARDOWN request // C请求关闭会话

S->C:TEARDOWN response // S回应该请求

 

基于FFmpeg接收RTSP传输的ts流并保存实现步骤:

组件和网络初始化——>打开网络流——>获取网络流信息——>根据网络流信息初始化输出流信息——>创建并打开ts文件——>写ts文件头——>循环读取输入流并写入ts文件——>写文件尾——>关闭流,关闭文件

 

关键函数解析:

int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options); //打开网络流或文件流

int avformat_write_header(AVFormatContext *s, AVDictionary **options);//根据文件名的后缀写相应格式的文件头

int av_read_frame(AVFormatContext *s, AVPacket *pkt);//从输入流中读取一个分包

int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt);//往输出流中写一个

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值