1.背景
最近在做音视频方面的工作,需要用到live555,准备了解一下其运行的流程,故下载其源码并编译之。
2.源码下载
下载网址:下载网址
网站中提供各个日期的live555源码的压缩包。
我下载的是最新版本。
源码结构介绍
解压之后的目录结构:
主要使用其中的四个目录, 分别对应 Live555 的四个库:
- UsageEnvironment 目录:生成的静态库为 libUsageEnvironment.lib, 这个库主要包含一些基本数据结构以及工具类的定义。
- groupsock 目录,生成的静态库为 libgroupsock.lib, 这个库主要包含网络相关类的定义和实现
- liveMedia 目录, 生成的静态库为 libliveMedia.lib, 这个库包含了 Live555 核心功能的实现
- BasicUsageEnvironment 目录, 生成的静态库为 libBasicUsageEnvironment.lib, 这个库主要包含对 UsageEnvironment 库中一些类的实现
- mediaServer 目 录 中 包 含 Live555 流 媒 体 服 务 器 的 标 准 示 例 程 序 , 运 行live555MediaServer.exe 后出现如下界面:在 mediaServer 目录中放入你的媒体文件, 如 test.mp3, 在 VLC 播放器中选择“媒体”-“打开网络串流”, 然后输入 rtsp://127.0.0.1:8554/test.mp3 就可以播放刚才的 mp3 文件了。
- proxyServer 目录中是 live555 实现的代理服务器的例子程序, 这个程序可以从其他的流媒体服务器(如支持 RTSP 的摄像机) 取实时的视频流然后转发给多个 RTSP 客户端, 这个程序很有用, 可以转发摄像机的实时视频流。
- testProgs 目录中包含很多的测试例子程序。
搭建编译环境及编译
网上有很多编译live555的博客,可以参考,我就不重复造轮子了。我参考的是这篇,非常详细,Windows10系统中用VS2019编译live555_Rustone的博客-CSDN博客_vs2019编译
安装这篇博客的步骤,也不能完全编译成功,下面依次列出我在编译过程中遇到的问题及解决方法
- 无法打开包括文件: “ifaddrs.h”、无法打开包括文件: “openssl/ssl.h”、error C4996: 'fileno'这三个问题参考:
fatal error C1083: 无法打开包括文件: “ifaddrs.h”: No such file or directory_houge101的博客-CSDN博客_ifaddrs头文件
- 找不到OpenSSL
这里特别说明下这个问题,其下载地址:http://slproweb.com/product/Win32OpenSSL.html。需要下载完整版,而不是Light版,下载可能会很慢。下载完成之后安装,下一步、下一步即可,重点是安装完成之后将OpenSSL目录拷贝到解决方案目录下,比如我的解决方案目录为:D:\code\live555\live555_learn\live555_learn,如下图
需要的OpenSSL文件如下图,主要是.h文件和库文件,
- 无法解析的外部符号 _BIO_new_socket参考:
https://blog.csdn.net/qq_34732729/article/details/104185103
另外注意:如果需要调试的话,需要将启动项目改到要调试的那个项目上,不然会报“lib不是有效的win32应用程序”的错误。即这里我们要调试的是mediaServer,就要将启动项目改到mediaServer上,Windows10系统中用VS2019编译live555_Rustone的博客-CSDN博客_vs2019编译这篇文章的最后也有讲。
演示-使用编译好的mediaServer推流
我们打开编译好的mediaServer.exe文件,如下图。
原生的live555支持这些格式的推流,常见的MP4格式并不在其中,live555是可以扩展MP4的,我们这里使用的方法是 使用FFmpeg将MP4格式转化为264格式。
在有外部请求播放视频的情况下,meidiaServer可以将同目录下的的视频推出去, 仅列出的那些格式的视频哦,其他不支持的格式是不能推的。
下面我们就来准备一个.264的视频,FFmpeg的安装自己在网上搜吧。
准备一个mp4视频,我的视频是test.MP4,复制到ffmpeg.exe目录下,并在ffmpeg.exe目录下打开cmd,
输入 ffmpeg -i test.mp4 -codec libx264 -bsf: h264_mp4toannexb -f h264 test.264
可以看到生成了一个test.264文件。
然后将test.264复制到mediaServer.exe文件所有目录,打开mediaServer.exe,
它告诉了我们收流的地址,即rtsp://192.168.22.41/文件名,我这里用的文件是test.264,所以我test视频的收流地址是:rtsp://192.168.22.41/test.264。
然后打开VLC,输入这个收流地址
于是就可以看到视频了,
编译一个rtspclient
在解决方案下创建一个client项目,在下载好的源码目录中找到testRTSPClient.cpp复制到client项目目录下--》导入到VS--》配置属性,和创建mediaServer项目相同的方法,参考meidiaServer的方法,这里就不贴详细步骤了。
做完配置之后,点击生成,不出意外有出现一堆问题,还是参考mediaServer,这些问题在生成mediaServer都有遇到,上面都有记录的。
解决完这些问题之后,点击重新生成,成功,开心。
在输出目录可以看到client.exe
运行一下:
打开mediaServer,在该目录下打开命令行,输入client rtsp://192.168.56.1/test.264,就可以收到流了。rtsp://192.168.56.1/test.264是我的流地址。