srs ~ Simple Realtime Server ~ 流媒体解决方案。

srs ~ Simple Realtime Server ~ 流媒体解决方案。



推流协议。

RTMP。

TCP 连接,容易被拦截。
服务器实时播放。

容易被拦截。

↓ ↓ ↓

HTTP-FLV。

下载到本地。
HTTP 不会被拦截。
但易盗取。

B 站:flv.js(支持 html5,屏蔽 Flash)。

HLS。

下载到本地。
但易盗取。
延时大(汇集 TS -> 保存 -> m3u8 列表)。不适合直播。

在这里插入图片描述



JPEG & MJPG。

  • JPEG 简称 JPG。

JPEG(Joint Photographic Experts Group)是 JPEG 标准的产物,该标准由国际标准化组织(ISO)制订,是面向连续色调静止图像的一种压缩标准。 JPEG 格式是最常用的图像文件格式,后缀名为 .jpg 或 .jpeg。

一个象素的颜色可以用 RGB 三原色来表示,其实还可以用 YUV 格式来表示。
使用 RGB、YUV 的格式编码的照片,文件都很大,比如常见的 BMP 文件就是用 RGB 编码把一个 BMP 文件转换为 JPEG 文件,可以发现图片质量没发生变化,但是文件变小了很多。
JPEG 是根倨人体视觉的特点采用了 YCbCr 格式,大大压缩了照片的大小。

  • MJPG。

Motion JPEG,简称 JPG。

Motion Joint Photographic Experts Group,是一种视频编码格式。

JPEG 是静态图片的编码格式,MJPG 是动态的视频编码格式。
可以简理解:MJPG 就是把多个 JPEG 图片连续显示出来。

mjpeg 是视频,就是由系列 jpg 图片组成的视频。
MJPG 是 MJPEG 的缩写,但是 MJPEG 还可以表示文件格式扩展名。

  • MJPG 优点。

很多摄像头本身就支持 JPEG、MJPG,所以处理器不需要做太多处理。
一般的低性能处理器就可以传输 MJPG 视频流。

  • MJPG 缺点。

MJPG 只是多个 JPEG 图片的组合,它不考虑前后两帧数据的变化,总是传输一帧帧图像:传输带宽要求高。
H264 等视频格式,会考虑前后两帧数据的变化,只传输变化的数据:传输带宽要求低。



about MP4。

误区:我们以为 mp4 就代表了音频、视频的压缩格式,其实不是。
MP4 只是一种封装格式,里面有音频数据、视频数据。
音频数据有自己的压缩格式,还不止一种。
视频数据也有自己压缩格式,还不止一种。

主要封装格式。

名称机构流媒体支持的编码格式支持的音频编码目前应用领域
AVIMicrosoft Inc.不支持几乎所有格式几乎所有格式BT 下载影视
MP4MPEG支持MPEG-2, MPEG-4, H.264, H.263 等AAC, MPEG-1, Layers Ⅰ, Ⅱ, Ⅲ, AC-3 等互联网视频网站
TSMPEG支持MPEG-1, MPEG-2, MPEG-4, H.264 等MPEG-1, Layers Ⅰ, Ⅱ, Ⅲ, AAC 等IPTV,数字电视
FLVAdobe Inc.支持Soremson, VP6, H.264MP3, ADPCM, Linear PCM, AAC 等互联网视频网站
MKVCoreCodec支持几乎所有格式几乎所有格式互联网视频网站
RMVBReal Networks Inc.支持RealVideo 8, 9, 10AAC, Cook Codec, RealAudio LosslessBT 下载影视

在这里插入图片描述

在这里插入图片描述



Nginx。

  • Nginx 需要第三方模块。

nginx-rtmp-module ~ 实现了 RTMP 协议。
nginx-http-flv-module:在 nginx-rtmp-module 的基础上,实现了 HTTPFLV,并覆盖 nginx-rtmp-module 的所有功能。(继承关系)。

第三方模块源码。

https://github.com/winshining/nginx-http-flv-module-packages

第三方模块参考资料。

https://github.com/winshining/nginx-http-flv-module-packages/blob/master/README.md

搭建流媒体服务器需要以上组件。而现有开源 srs 服务器已将上述组件集成,可采用 srs 服务器。



下载 FFmpeg。

http://ffmpeg.org/download.html

http://ffmpeg.org/releases/

/usr/local/bin/ffmpeg



开源流媒体服务器 ~ srs。

http://www.ossrs.net/srs.release/releases/

https://github.com/ossrs/srs

  • Step 1: Get SRS.

git clone https://gitee.com/winlinvip/srs.oschina.git srs &&
cd srs/trunk && git remote set-url origin https://github.com/ossrs/srs.git && git pull

gitee

https://gitee.com/winlinvip/srs.oschina

  • Step 2: Build SRS.

./configure --with-ffmpeg && make

  • Step 3: Run SRS

根据推流类型选择对应配置文件。

./objs/srs -c conf/srs.conf

  • Whatever, you can also directly run SRS in docker:

docker run -p 1935:1935 -p 1985:1985 -p 8080:8080
registry.cn-hangzhou.aliyuncs.com/ossrs/srs:3

[geek@localhost trunk]$ sudo docker exec -it beb6d68c89bc /bin/bash
[root@beb6d68c89bc srs]# ls
conf etc objs usr



rtmp 推流。
  • vi 修改 srs 配置文件。默认的,conf/ 文件夹下有该文件。
# conf/rtmp.conf
listen              1935;
max_connections     1000;
vhost __defaultVhost__ {
}
  • 启动 ~ 指定配置文件。

./objs/srs -c conf/rtmp.conf

  • 使用 FFMPEG 命令推流。

shell

    for((;;)); do \
        ./objs/ffmpeg/bin/ffmpeg -re -i ./doc/source.200kbps.768x320.flv \
        -vcodec copy -acodec copy \
        -f flv -y rtmp://192.168.33.132/live/livestream; \
        sleep 1; \
    done

Windows Dos。

.\ffmpeg -re -i ./test.mp4 -vcodec copy -acodec copy -f flv -y rtmp://192.168.33.132/live/livestream

或使用 FMLE 推流(适用于 OBS)。

FMS URL: rtmp://192.168.33.132/live
Stream: livestream
  • 测试 ~ 使用 VLC 播放器播放流。

rtmp://192.168.33.132/live/livestream

在这里插入图片描述

在这里插入图片描述



flv 推流。
  • srs 配置。

[geek@localhost trunk]$ sudo vim conf/http.flv.live.conf


# the config for srs to remux rtmp to flv live stream.
# @see https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHttpStream
# @see full.conf for detail config.

listen              1935;
max_connections     1000;
http_server {
    enabled         on;
    listen          8080;
    dir             ./objs/nginx/html;
}
vhost __defaultVhost__ {
    http_remux {
        enabled     on;
        mount       [vhost]/[app]/[stream].flv;
    }
}
  • 启动推流编码器。

./objs/srs -c conf/http.flv.live.conf

  • 使用 FFMPEG 命令推流。

Shell。

    for((;;)); do \
        ./objs/ffmpeg/bin/ffmpeg -re -i ./doc/source.200kbps.768x320.flv \
        -vcodec copy -acodec copy \
        -f flv -y rtmp://192.168.33.132/live/livestream; \
        sleep 1; \
    done

Windows Dos。

.\ffmpeg -re -i ./test.mp4 -vcodec copy -acodec copy -f flv -y rtmp://192.168.33.132/live/livestream

或使用 FMLE 推流(适用于 OBS)。

FMS URL: rtmp://192.168.33.132/live
Stream: livestream
  • 生成的流地址为:

RTMP 流地址为:rtmp://192.168.33.132/live/livestream
HTTP FLV:http://192.168.33.132:8080/live/livestream.flv

RTMP 流地址为:rtmp://192.168.33.132/live/livestream,可以使用 VLC 观看,或者使用在线 SRS 播放器播放:srs-player

HTTP FLV 流地址为:http://192.168.33.132:8080/live/livestream.flv,可以使用 VLC 观看,或者使用在线 SRS 播放器播放:jwplayer-flv

备注:请将所有实例的 IP 地址 192.168.33.132 都换成部署的服务器 IP 地址。



m3u8 推流。

conf/hls.conf

# the config for srs to delivery hls
# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleHLS
# @see full.conf for detail config.

listen              1935;
max_connections     1000;
http_server {
    enabled         on;
    listen          8080;
    dir             ./objs/nginx/html;
}
vhost __defaultVhost__ {
    hls {
        enabled         on;
        hls_path        ./objs/nginx/html;
        hls_fragment    10;
        hls_window      60;
    }
}

备注:我们使用 SRS 内置的 HTTP 服务器分发 HLS 切片,也可以使用 Nginx 等 Web 服务器分发。

备注:hls_path 必须存在,srs 只会自动创建 ${hls_path} 下的 app 的目录。

./objs/srs -c conf/hls.conf

linux

    for((;;)); do \
        ./objs/ffmpeg/bin/ffmpeg -re -i ./doc/source.200kbps.768x320.flv \
        -vcodec copy -acodec copy \
        -f flv -y rtmp://192.168.33.132/live/livestream; \
        sleep 1; \
    done

Windows

.\ffmpeg -re -i ./test.mp4 -vcodec copy -acodec copy -f flv -y rtmp://192.168.33.132/live/livestream

或使用支持 h.264+aac 的 FMLE 推流(若不支持 h.264+aac,则可以使用 srs 转码,参考Transcode2HLS):

FMS URL: rtmp://192.168.33.132/live
Stream: livestream
  • 观看 RTMP 流。详细参考 HLS 分发。

RTMP 流地址为:rtmp://192.168.33.132/live/livestream

可以使用 VLC 观看。

或者使用在线 SRS 播放器播放:srs-player

备注:请将所有实例的 IP 地址 192.168.33.132 都换成部署的服务器 IP 地址。

  • 观看 HLS 流。详细参考 HLS 分发

HLS 流地址为:http://192.168.33.132:8080/live/livestream.m3u8

可以使用 VLC 观看。

或者使用在线SRS播放器播放:srs-player

备注:请将所有实例的 IP 地址 192.168.33.132 都换成部署的服务器 IP 地址。

注意:VLC 无法观看纯音频流,jwplayer 可以观看。

分发纯音频流参考:HLS audio only

在这里插入图片描述



rtsp://192.168.6.120:554/test.sdp

ffmpeg -f rtsp -rtsp_transport tcp -i rtsp://192.168.6.120:554/test.sdp -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec copy -f flv rtmp://192.168.33.131/live/livestream

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script type="text/javascript" src="ckplayer/ckplayer.js" charset="utf-8" data-name="ckplayer"></script>
<div class="video" style="width: 600px;height: 400px;">播放器容器</div>
<script type="text/javascript">
    //定义一个变量:videoObject,用来做为视频初始化配置
    var videoObject = {
        container: '.video',// “#”代表容器的 ID,“.” 或 “” 代表容器的 class。
        variable: 'player',// 播放函数名称,该属性必需设置,值等于下面的 new ckplayer() 的对象。
        // video: 'http://ckplayer-video.oss-cn-shanghai.aliyuncs.com/sample-mp4/05cacb4e02f9d9e.mp4'// 视频地址。
        video: 'rtmp://192.168.33.131/live/livestream'// 视频地址。
        // video: 'http://192.168.33.131:8080/live/livestream.m3u8'// 视频地址。√
        // video: 'rtmp://192.168.33.131:1935/live/livestream'// 视频地址。   
    };
    var player = new ckplayer(videoObject);//初始化播放器
</script>


</body>
</html>

SRSSimple Rtmp Server)的定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。 • 运营级: 商业运营追求极高的稳定性,良好的系统对接,以及错误排查和处理机制。譬如日志文件格式,reload,系统HTTP接口,提供init.d脚本,转发,转码,边缘回多源站,都是根据CDN运营经验作为判断这些功能作为核心的依据。 • 互联网: 互联网最大的特征是变化,唯一不变的就是不断变化的客户要求,唯一不变的是基础结构的概念完整性和简洁性。互联网还意味着参与性,听取用户的需求和变更,持续改进和维护。 • 直播服务器: 直播和点播这两种截然不同的业务类型,导致架构和目标完全不一致,从运营的设备组,应对的挑战都完全不同。两种都支持只能说明没有重心,或者低估了代价。 • 集群: FMS(AMS)的集群还是很不错的,虽然在运营容错很差。SRSSimple Rtmp Server)支持完善的直播集群,Vhost分为源站和边缘,容错支持多源站切换、测速、可追溯日志等。 • 概念完整性: 虽然代码甚至结构都在变化,但是结构的概念完整性是一直追求的目标。从SRSSimple Rtmp Server)服务器,P2P,ARM监控产业,MIPS路由器,服务器监控管理,ARM智能手机,SRSSimple Rtmp Server)的规模不再是一个服务器而已。 • 简单实现: 对于过于复杂的实现,宁可不加入这个功能,也不牺牲前面提到的要求。对于已经实现的功能的代码,总会在一个版本release前给予充分的时间来找出最简答案。不求最高性能,最优雅,最牛逼,但求最简单易懂。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lyfGeek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值