大作业 - 2 rtmp服务器配置

服务器端

开源的rtmp服务器在网上主要有这样几种:crtmpserver,nginx-rtmp-module,Red5,FluorineFx等。

crtmpserver

在ubuntu下,获取软件自然先从apt-get开始。

$ sudo apt-get install crtmpserver

使用apt-get方式安装的crtmpserver默认配置在/etc/crtmpserver目录下。此时,这个服务器已经可以运行。

apt-get所下载下来的长时间运行的程序基本上会在/etc/init.d下有一个接受start, stop, restart等命令的脚本,而crtmpserver也不例外。所以,直接使用该脚本启动服务器即可。

$ sudo /etc/init.d/crtmpserver start
* Starting c++ RTMP Server crtmpserver            [ OK ]

但为了确保服务器的运行符合我们的预期,需要检查一下配置文件。通过查看 /etc/init.d/crtmpserver 脚本,可以看到默认配置文件为 /etc/crtmpserver/crtmpserver.lua。

再通过查看配置文件,最终定位到applications目录下的appselector.lua文件。文件内容如下

application = 
{
    ......
    default = true,
    acceptors = 
    {
        {
            ip = "0.0.0.0",
            prot = 1935,
            protocol = "inboundRtmp"
        }
    ......
    }
}

以上配置文件说明,该applications为默认app,接受所有的连接请求,同时,绑定本机所有ip上的1935端口,协议为Rtmp协议。该配置满足我们的要求。

至此,一个支持rtmp协议的服务器已经搭建完毕。

Nginx

Nginx也包括在在ubuntu下的包管理器中,但是,从服务器下载的是已经编译好的Nginx。而Nginx添加模块的方式需要重新编译,此时,我们需要自己编译Nginx。

编译步骤也很简单,按照rtmp-module Github页面上的流程进行即可。

$ cd /path/to/nginx_source_code
$ ./configure --add-module=/path/to/nginx-rtmp-module
$ make
$ make install

make install之后,Nginx被安装到了/usr/local/nginx目录下,通过编辑./conf/nginx.conf配置文件,即可使用rtmp模块。

......
rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live{
            live on;
            record off;
        }
    }
}

如上的配置表示这是一个rtmp模块,监听端口1935,直播模式为开,并且不记录为文件。该application接受型为rtmp://xx.xx.xx.xx:1935/live/xxxx的地址。

配置完成后使用命令打开服务器,即可开始使用Nginx服务器。

$ /usr/local/nginx/sbin/nginx -t

客户端

当然,口说无凭,服务器能否使用自然需要一些方式来验证。由于rtmp协议有着三方的共同参与:服务器、推流和拉流。所以,为验证服务器的可用性需要构建出一个推流端以及至少一个拉流端进行验证。

拉流

获取总是比创造容易。视频直播流的获取也比发送方便很多。
推荐使用VLC与SRS播放器。VLC在ubuntu下可以由apt-get获取。

推流

推流的工具有很多,常见的有图形化的OBS以及命令行下的FFmpeg。

OBS

该软件被用于各大视频网站的直播中,支持摄像头捕获、屏幕分享等各种常用功能。

最简单的获取方式依然是apt-get包管理器。

$ sudo add-apt-repository ppa:obsproject/obs-studio
$ sudo apt-get update && sudo apt-get install obs-studio

下载完毕之后,需要进行配置后才可使用。首先,在 File/Settings 选项卡中,选择Stream配置项。将Stream Type改为Custom Streaming Server。而后url填写crtmpserver的端口地址即可。

我的配置

此时,OBS会将流量发送至rtmp://127.0.0.1:1935/livd/test这个地址,而拉流也是通过这个地址。

屏幕捕获直播

FFmpeg

我们的应用的需求并没有涉及到复杂的视频处理,而仅仅只是捕获摄像头数据并按照rtmp格式传输即可。同时,并不是每一个客户端均支持图形化配置运行界面,所以,可能需要一个新的选择。

而FFmpeg作为一个老牌的多媒体编解码框架,同时也提供了发送流媒体的能力,与我们的需求吻合。

$ ls /dev/video*
/dev/video0
$ ffmpeg -f v4l2 -list_formats all -i /dev/video0
[video4linux2,v4l2 @ 0x2074920] Raw       :   yuyv422 :     YUV 4:2:2 (YUYV) : 640x480 352x288 320x240 176x144 160x120 1280x720 640x480
[video4linux2,v4l2 @ 0x2074920] Compressed:     mjpeg :                MJPEG : 640x480 352x288 320x240 176x144 160x120 1280x720 640x480
/dev/video0: Immediate exit requested
$ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -f flv rtmp://127.0.0.1:1935/live/test

以上命令获取了当前电脑的视频设备,并通过ffmpeg查看了具体的摄像机细节。最后一条命令则是开始向地址rtmp://127.0.0.1:1935/live/test进行推流。

当然,ffmpeg也可以使用文件作为流输入。

$ ffmpeg -i 这个杀手不太冷.rmvb -f flv rtmp://127.0.0.1:1935/live/test
使用ffmpeg推送文件流直播

一些问题

在实践过程中,可能会发生FFmpeg与crtmpserver不兼容的问题,例如说

[rtmp @ 0x18aa360] Server error: Specified stream not found in call to releaseStream
[rtmp @ 0x18aa360] Sending publish command for 'test2'
[rtmp @ 0x18aa360] Server error: call to function _checkbw failed

或者

HandShake: client signature does not match!

此时可以试着使用

ffmpeg ... ...  -f flv -metadata streanName="test" tcp://localhost:6666

来尝试解决。此时6666端口使用的是crtmpserver所带的application文件flvplayback.lua。而原来所使用的1935端口是在appselector.lua中定义。

同时,还可以修改上述两个配置文件中的validateHandshake字段为false放行未匹配的客户端。但是,就我本人实验而言,没有特别大效果。

最终项目使用以下命令成功在树莓派上实现摄像头推流。

raspivid -t -1 -w 960 -h 540 -fps 25 -b 500000 -vf -o - | ffmpeg -i - -vcodec copy -an -r 25 -f flv -metadata streamName=test tcp://remote_server_ip:6666

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容