15.live555mediaserver-rtp打包

live555工程代码路径
live555工程在我的gitee下(doc下有思维导图、drawio图):
live555
https://gitee.com/lure_ai/live555/tree/master

章节目录链接
0.前言——章节目录链接与为何要写这个?
https://blog.csdn.net/yhb1206/article/details/127259190?spm=1001.2014.3001.5502

学习demo
live555mediaserver.cpp

学习线索和姿势
1.学习的线索和姿势

网络编程
流媒体的地基是网络编程(socket编程)。
[网络编程学习]-0.学习路线。

绘图规则
本文的对象图和思维导图遵守的规则详见:
2.绘图规则

非阻塞服务端网络编程流程
socket创建、bind、listen、select、accept、select、recv/send-close。

rtsp协商流程
options、describe、setup、play、pause、teardown、get parameter、set parameter

rtp打包流程
打开媒体文件、读取一帧媒体数据、rtp打包、rtp发送

本节内容和目标
(1)rtp打包
(2)思维导图绘制
(3)wireshark抓包
(4)对象图

正式开始

server端收到play指令后就开始进行流媒体数据打rtp包进行发送了。
一般rtp打包思路:
(1) 打开媒体文件
(2)读取一帧数据
(3) rtp打包
(4)rtp发送
(5) 文件读完结束断开rtsp链接或者从头开始不断循环
一般是2-4不断循环直至文件结尾,进入第5条。
因为live555是支持多种媒体文件类型的——264/265/mkv等等文件——那么这些流程是不是可以高度抽象出统一的基类,各媒体类型子类分别实现自身的处理方法?
是否如此还得学习下其流程。

1.打开媒体文件

打开文件的接口都是调用OpenInputFile函数,目前264文件和mkv文件分析,它被ByteStreamFileSource这个类的方法createNew调用,也就是统一到这个类里面了。

mkv:
15.live555mediaserver-rtp打包_第1张图片

264:
15.live555mediaserver-rtp打包_第2张图片

打开的时机:
describe获取sdp时会打开后又关闭。
mkv:
在这里插入图片描述
264:
在这里插入图片描述

还有setup,打开直到结尾才会关闭。

mkv:
15.live555mediaserver-rtp打包_第3张图片
264:
在这里插入图片描述
其他格式文件应该类似,把打开媒体文件都统一到了类ByteStreamFileSource里了。这也算是抽象了吧。

2.读取一帧数据

之前play的流程里有rtp打包的初始流程:
15.live555mediaserver-rtp打包_第4张图片
一如这篇文章所讲:https://blog.csdn.net/Lasuerte/article/details/80929769。

3.rtp打包

4.rtp发送

5.文件读完

关闭媒体文件是CloseInputFile这个函数,它也是被集成到类ByteStreamFileSource的析构函数里面了。也就是整体对媒体文件的打开与关闭就继承到类ByteStreamFileSource里面了,抽象为这个类了。
创建这个类就会打开流媒体文件,销毁这个类就是关闭流媒体文件。
15.live555mediaserver-rtp打包_第5张图片

你可能感兴趣的:(手把手一起学live555,tcp/ip,网络协议,学习)