创建一个实现录像的客户端(保存流媒体)

1、

这个客户端实现的功能应该是
1、可以将流媒体直接保存为本地的媒体文件
2、可以将流媒体服务器上的媒体文件保存到本地的媒体文件

2、playCommon

在live555的源程序中,有一个用于测试的程序playCommon.c,该程序就实现了上述的两个功能
live555中除了实现RESPServer类以外,还有RTSPClient类,用来当做媒体流接收的客户端(一个控制台客户端没办法播放视频,但是可以把视频保存下来)

3、

暂时不去研究源代码是怎么实现的,只是看下主函数是怎么弄得
1、先传参传你希望保存的媒体的URL地址
2、和创建服务器一样,我们需要创建一个RTSPClient类

ourClient = createClient(*env, streamURL, verbosityLevel, progName);

其内部的实现还是比较麻烦的,需要继续调用很多函数,要创建录像文件,同样和播放视频一样也要创建FileLink类来接收文件,FileLink类下根据不同的视频编码格式写了很多不同的子类。
FileSink通过MediaSubsession的FramedSource获取数据,然后保存到文件中。
同时可以设置录像的保存时间等等…

4、测试看看

IP(.108)地址是我所在实习公司测试部的一台大华摄像机,偷偷用来测试一下
main函数的传入参数
-u后需要给出登录用户和密码
在这里插入图片描述

启动程序,我们看到程序提醒我们我们设置的缓冲区似乎不太够用,看看这样保存的视频是不是有问题呢?
创建一个实现录像的客户端(保存流媒体)_第1张图片
注意,保存下来的视频直接用播放器播放是大概率播放不了的,我们用格式工厂进行转格式后播放看看效果
创建一个实现录像的客户端(保存流媒体)_第2张图片
看到保存下来的视频转格式后是可以播放的,不过确实画面出了问题,我们将缓冲区改大后再试一次
在这里插入图片描述
我们看到程序没有再提示缓冲区问题
创建一个实现录像的客户端(保存流媒体)_第3张图片
转格式后查看视频,确实完整了

5、live555

不知道live555现在在大型的流媒体处理中是否还有在运用,但是其功能实现毫无疑问是可以的,性能方面听说源码是采取单线程的,所以性能还有很大的提高空间,至于处理并发,源码采用的是select模型

你可能感兴趣的:(音视频相关内容)