crtmpserver系列(二):搭建简易流媒体直播系统

crtmpserver简介

我们在第一章的时候已经简要说明了crtmpserver,crtmpserver是一个由C++语言编写的开源的RTMP流媒体服务器,与其对应的商业产品自然是Adobe公司的FMS。与FMS相比,从功能上来说crtmpserver只能称为FMS的简化版本,其功能并没有FMS那么完善甚至是远远没有达到。其与flash player的兼容性自然也比不上官方的FMS了。但是crtmpserver提供了最常见的RTMP实现。作为开源的高性能RTMP流媒体服务器,不仅可以用在x86平台的linux服务器,windows服务器,还可以被用在arm等嵌入式平台上。crtmpserver的代码结构良好,类的继承体系清楚,代码效率高。是学习RTMP协议和服务器端编程的好例子。

crtmpserver的官方网站是www.rtmpd.com 但是目前该网站好像是出了问题,并不能打开,crtmpserver的google论坛上有网友说crtmpserver的源码暂时移动到github上了,具体地址是https://github.com/shiretu/crtmpserver 如果大家想要下载到最新的crtmpserver源码,可以到该git页面上下载。后续还请关注crtmpserver的官方网站。

本系列文章并不打算使用该git上下载的代码,由于之前工作中使用的crtmpserver代码是基于717的版本,所以该系列也将基于此版本作为讲解。请在这里下载crtmpserver-717.tar.gz 代码包,其关联的openssl代码为 openssl-1.0.1c.tar.gz

linux下编译与运行crtmpserver

本次linux使用的发行版是Ubuntu 10.10,各个编译工具版本如下:
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
cmake version 2.8.7

crtmpserver源码依赖openssl,所以我们需要先编译openssl库,并安装相关的头文件。另外crtmpserver使用的cmake工具进行源代码的编译管理,所以也需要安装cmake。

openssl的编译:本次使用的是openssl-1.0.1c.tar.gz 解压之后在源码根目录直接运行:
$ ./config
$ make
$ make test
$ make install

crtmpserver的编译:解压上面下载到的gz压缩包,运行下面命令:
cd crtmpserver-717/builders/cmake/
cmake .
make

在make的时候报告下面的错误:

在文件tinyxmlparser.cpp中有一个变量ptrdiff_t没有定义,我们打开该文件,在第407行将变量ptrdiff_t加上std的前缀即可,改为 std::ptrdiff_t,之后继续make

之后出现下面的错误:

说有一个变量objectEncoding定义之后没有使用,而警告被当作错误处理。我们只需要修改一下CMakeFileLists.txt 找到如下这一行,注释掉即可,其实主要是去掉-Werror选项:

修改CMakeFileLists.txt之后需要重新cmake 这样会重新生成Makefile文件,然后再make直到完成,最后完成之后的信息是这样的:

运行crtmpserver,编译完成之后此时的目录还在crtmpserver-717/builders/cmake/目录下,直接运行下面的命令:
./crtmpserver/crtmpserver ./crtmpserver/crtmpserver.lua

程序成功运行之后的显示如下,表示成功运行:

windows下编译与运行crtmpserver

首先在windows下编译crtmpserver也需要windows版本的openssl,所以我们需要先编译windows版本的openssl。

编译windows版本的openssl:将openssl解压之后,有一个INSTALL.W32或者INSTALL.W64,里面有如何编译windows版本的openssl的说明,我们以win32为例子。

编译openssl需要perl的支持,我们先安装windows环境下的perl工具,其下载地址为:http://www.activestate.com/activeperl 我的电脑是64位的,所以我下载的是 ActivePerl-5.24.0.2400-MSWin32-x64-300558.exe 直接安装,在安装的下一步中选择 “Typical”就可以。

安装完成之后,我们就可以开始编译windows版本的openssl了,步骤如下:

<1>. 我用的是VS2010。其他的版本应该差不太多,打开“开始”---“程序”---“Microsoft Visual Studio 2010”---“Visual Studio Tools”---“Visual Studio 命令提示(2010)”,注意这里要从菜单中打开VS 2010的命令行,会自动设置一些环境变量的,如果直接运行“开始”---“运行”--cmd.exe这个命令行的话,可能编译的时候找不到头文件等。
<2>. 在上面打开的VS2010的命令行中,cd到openssl源码根目录,然后运行下面的命令:
perl Configure VC-WIN32 no-asm --prefix=c:/openssl-1.0.1c  
指定配置,并设置openssl的安装目录
<3>. ms\do_ms
<4>. 将nmake.exe所在的路径添加到系统环境变量,例如我找到nmake.exe是在D:\Program Files\Microsoft Visual Studio 10.0\VC\bin下面
<5>. 将D:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE添加到环境变量,因为cl.exe需要的mspdb100.dll在这个目录下,否则会返回0x80错误。同样你也应该在你自己的VS2010的相关安装目录下找。
<6>. nmake -f ms\ntdll.mak
<7>. nmake -f ms\ntdll.mak test 这一步是编译测试,可以不做,仅仅是为了测试上面的是否编译好了
<8>. nmake -f ms\ntdll.mak install  这一步是安装,会安装到我们的第4步指定的 --prefix=c:/openssl-1.0.1c 目录中也就是拷贝相关的库文件到这里

windows下的openssl编译完成的界面如下:

安装完成的界面如下:

现在开始编译windows版本的crtmpserver,打开crtmpserver的源码目录中的builders\VS2010\VS2010.sln 工程,直接在解决方案上面右键,生成解决方案。会出现错误提示找不到openssl的头文件:

在VS2010中crtmpserver的各个模块被单独做为项目工程,很多工程都用到了openssl,所以我们需要设置一个全局的openssl的头文件和库文件的路径。在VS2010中设置全局包含没有VC那么方便,首先打开属性管理器窗口:

再打开面板中随便选择一个项目,展开如图的界面,双击如图所示指定的项目文件,并在弹出的界面中指定包含目录路径:

用同样的方法指定库文件的路径:

继续编译,发现报错如下:

将上图中所示的两处地方,0值改成(uint32_t)0; 继续编译,报告一个链接错误,并且还有一些intellisense错误,如下:

在crtmpserver官方源码提供的VS2010.sln解决方案中有两个源文件没有添加到工程中来,我们手工添加进来,如下图,打开thelib工程,展开如下图的rtp目录,右键添加现有项目:

选择头文件nattraversalprotocol.h 该文件在源码目录的sources/thelib/include/protocols/rtp/目录下:

同样的方法添加cpp文件,cpp文件所在的目录为sources/thelib/src/protocols/rtp/目录:

添加完成之后继续生成解决方案,解决方案生成成功,我们需要设置一下运行的命令行参数:--use-implicit-console-appender crtmpserver.lua 表示打印控制台日志,并且使用工作目录下的crtmpserver.lua作为配置文件,将工作目录设置成$(OutDir)该变量对应的目录实际上是crtmpserver-717\builders\VS2010\Debug,我们的程序最终编译之后的执行文件和库文件就放在这个目录下:

我们可以打开编译成功之后文件生成的目录中的文件如下,目录为builders/VS2010/Debug/目录:

直接点击VS2010的菜单的“开始执行(不调试)”,这样cmd输出窗口最后输出完成之后,会输出一行“请按任意键继续…”否则一闪而过出错也看不清楚。

运行之后干脆报下面的错误:

程序直接崩溃,原来openssl的相关dll没有拷贝到我们的程序目录下,我们拷贝过来:

继续运行,发现报错如下:

我们去掉配置文件中的ssl权限验证相关的内容:

注释掉相关节点之后,继续运行,仍然报错:

错误显示配置中指定的log的路径设置有问题,继续修改配置如下:

再次运行,显示运行成功,界面如下:

推流到crtmpserver

编译成功crtmpserver之后,我们试着将直播流推送到服务器上,然后直播。没有摄像头,我们可以使用开源的obs软件推送直播流,下载安装就不说了,相信做过游戏直播的都多少了解。下面是obs打开之后的界面:

设置视频捕获源:

点击主界面右下角的“设置”按钮进入推流的参数设置,我们主要是设置“串流”选项卡中的内容,crtmpserver的配置文件中默认配置有live这个推流点,所以我们的推流路径是rtmp://127.0.0.1/live/ 随便设置一个直播流名,例如这里设置的是test,设置好之后如下图,点击确定即可。

然后点击主界面上的“开始串流”按钮开始 推流,可以看到推流成功之后,在我们的crtmpserver运行的控制台窗口中会有一些日志打印出来:

从最后两行的日志中我们可以看到流test已经成功注册。

从crtmpserver播放直播流

如何播放刚才推送的流呢,我们找一个支持rtmp协议的播放器,vlc的最新版本应该是支持rtmp协议的播放的。另外flash播放器也是一个很好的选择,在播放器中输入地址和流名:

播放效果如下,截的是电脑桌面:

到此,我们整个crtmpserver源码的windows平台的编译,linux平台的编译,推流,播放就算完整了。可以看到windows的编译要比linux复杂的多,其实很多开源软件对linux要更加友好一点,包括编译运行的过程都要顺利一点。后面的章节中,我们将开始分析crtmpserver的架构、RTMP协议的细节,MP4文件的格式,最后我们将实现HLS功能(原生的crtmpserver是没有HLS的)。

如果本文对您有所帮助,您的赞,会让我有更大的信心写好后面的文章呢。

时间: 2024-08-04 02:51:54

crtmpserver系列(二):搭建简易流媒体直播系统的相关文章

用手机APP观看热门剧《楚乔传》的P2P流媒体直播系统解决方案

近期热播的大剧<楚乔传>,网友们对最新剧情讨论得热火朝天:楚乔传>什么时候结局? 最新剧情预告呢?楚乔燕洵是否分手?蒙枫喜欢宇文玥吗?掀起了一股观看风潮. 随着这部励志大剧热播,一些关于手机观看<楚乔传>的APP的搜索关键词迅速铺开来: 1  有可以直接在手机上看直播<楚乔传>的APP吗? 2  爱奇艺热门剧播放后台是用的P2P流媒体直播/点播系统吗? 3  热播剧手机直播所需的P2P流媒体平台如何搭建? 4  如何开发共享直播系统的终端观看APP? 5  哪个手

搭建简单的直播系统

一.环境: Ubuntu :Nginx-rtmp-module Windows:Adobe Flash Media Live Encoder 二. 1.安装git:sudo apt-get install git 2.查看所有服务:service --status-all 查询nginx进程:ps -ef|grep nginx 重启nginx:service nginx -s reload 运行nginx:etc/init.d/nginx 停止nginx:kill -QUIT 主进程号 检查配置

优秀开源项目之二:流媒体直播系统Open Broadcaster Software

Open Broadcaster Software(OBS)是一款用于音视频录制和直播的免费开源软件.可以轻松部署到多种平台,目前支持Windows.MAC和Linux. 特性: 1.高性能的实时视频/音频捕获和混合,无限制的场景,可以通过自定义转换在这些场景之间无缝切换. 2.提供视频源过滤器,比如图像掩蔽.颜色校正.色度/颜色键控等等. 3.直观的音频混合器,该混合器带有过滤功能,比如说噪声门.噪声抑制和增益. 4.强大易用的配置选项,可以轻松的添加资源.删除资源或者调整资源的属性. 5.改

NMock学习系列(二)--- NMock在MVP架构系统的单元测试中的应用

介绍 上篇已经学习了NMock的一些基础概念和代码,同时也想到了可能的两个应用场景,本篇开始学习下第一个应用场景---NMock在MVP架构模式下的应用场景.MVP的架构模式概念比较简单,主要是以接口的形式隔离视图与控制器之间的耦合,具体对于MVP模式的介绍请自行搜索学习.本篇接下来的学习前提是读者了解MVP的架构模式,主要明白视图接口的解耦. 应用场景 基于MVP模式的项目往往业务逻辑的编写和视图的建立是分开进行的,视图只需定义出接口供业务控制器进行依赖调用.所以如果在视图还未具体实现的情况下

搭建和配置支撑2000人同时观看的流媒体服务器系统(Linux步骤详解)

鉴于服务器端的安全性因素,更多的网络管理员更愿意在Linux操作系统下搭建流媒体服务器系统(800Li Media Server)进行互联网的实时直播和点播.那么如何在Linux操作系统下安装和配置流媒体服务器系统呢?下面是详细的安装配置说明.(以八百里流媒体服务器系统的Linux的安装和配置为例说明) 安装之前请确认 a. 管理员账号权限登录:b. 关闭防火墙:c. 设置固定IP.设置成自动获取IP会导致流媒体服务器系统不能正常工作: d. 确认操作系统为CentOS或Redhat. 安装方法

推荐一款优秀的开源流媒体服务器系统:SRS(Simple RTMP Server)

最近视频流媒体直播的应用很火,各种手机端的直播.美女聊天室.财经直播等等.由于项目的需要,需要寻找一款合适的流媒体直播系统,如果从头开发,显然成本和周期都不能在可接受的范围内.幸运的是,我找到了SRS这款优秀的直播系统,该系统官方地址为:http://www.ossrs.net/srs.release/releases/ 首先不得不提的是:SRS是国人开发,国人开发的开源系统近几年越来越多,是非常令人惊喜的事情,并且有很多非常优秀的,非常令人开心. 另外不得不提的是:SRS的文档非常齐全,特别是

资深程序员告诉你:直播系统源码开发“四部曲”

你是怎么开始接触直播APP的? 你是通过什么渠道接触直播APP? 你观看直播的频率是多长? 你使用直播APP是为了什么? 直播APP 经常使用直播APP的你这些问你都有认真想过吗?直播不仅丰富了我们的日常生活,也让企业有了一个宣传自己的渠道,依附于其他平台的直播都有局限性,因此很多垂直行业都会选择自己开发直播平台,下面同创天达小编就简单介绍一下直播系统源码开发的"四部曲". 第一步,采集,iOS是比较简单的,Android则要做些机型适配工作,PC最麻烦各种奇葩摄像头驱动,出了问题特别

直播系统推拉流端技术

想要搭建网络视频直播系统就要明白视频直播的过程是什么样的,而直播流程可以分为采集.前处理.压缩编码.推流.拉流.解码.渲染播放这几个环节,其中涉及到推流端.拉流端和服务器三端的知识点,服务器方面的知识点很多,拓幻科技这里先简单说下推流端和拉流端的一些知识点,服务器方面可以先看我以前写的文章. 一. 推流端的四个环节1. 首先是采集环节:采集是指对图像和声音的采集,简单说就是能让网络视频直播系统和主播摄像头连起来,软件能获取到外界的音视频信息.然后是前处理阶段:这里也是俗称美颜的阶段,这要求我们在

直播APP源码搭建简易直播平台及个人开发直播系统的难点

如何用直播APP源码搭建一个简易的直播平台 一.前端推流1.推流可以采用命令: ffmpeg -i input -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/cgstream0input 可以是实时流,也可以是文件,如果是文件 需要加上-re.运用中需要将127.0.0.1换成rtmp所在机器的ip地址. 用命令推流时间戳信息不能任意修改,想要达到一个满意的结果还是要用代码实现. 主要方法代码如下: 1.打开视频流,filename