SRS+flv.js打造兼容性较高的直播、点播平台

https://www.cnblogs.com/lanqie/p/7804466.html

SRS+flv.js打造兼容性较高的直播、点播平台

  • 1、公司之前用的是:
  • 2、SRS+flv.js的优点:
  • 3、上图,看看效果:
  • 4、flv.js下载,构建:
  • 5、如果上一步成功,接下来就是搭建SRS服务器了
  • 6、添加回调
  • 7、视频编辑
  • 8、压力测试
  • 9、转了一圈回到原点
  • 10、转机
  • 11、环境和部署脚本:
  • 13、srs跨域
  • 14、集群和负载均衡
  • 15、flv.js优化--低延时(为了导播,直播不需要)
  • 16、音频不同步和卡顿的解决
  • 17、添加HLS流

 

*************************************************************************************************************************************************

注意:强烈建议使用srs3.0,srs2.0存在的问题(回调,跨域)等问题不需要修改源码,而且可以修改生成mp4视频。

回调:

1

2

3

4

5

6

7

8

9

10

11

12

# SRS推流开始,结束

def live_publish(request):

    # 添加磁盘检测

    if not mounted():

        return HttpResponse(1)

    params = str(request.body, encoding="utf-8")

    object = json.loads(params)

    l_uuid = object.get('stream')

    live = Live.objects.get(uuid=l_uuid)

    live.status = 'living'

    live.save()

    return HttpResponse(0)

 跨域:

  没测,一直用nginx代理

MP4:

  后期打算直接生成mp4,替换之前的flv

*************************************************************************************************************************************************

回到顶部

1、公司之前用的是:

直播:rtmp+jwplayer

点播:h5(mp4文件)

弊端:兼容性差,貌似跟系统版本,浏览器,浏览器版本都有关。还有就是rtmp推流生成的文件是flv格式,需要转码成mp4才能点播。

 

回到顶部

2、SRS+flv.js的优点:

当然是兼容性大大提高了,在pc端谷歌,火狐都可以播放,手机端火狐可以,谷歌不行,其他没测。

 

回到顶部

3、上图,看看效果:

 

 

样式什么的没添加,官方的demon 直接copy过来。

 

 

回到顶部

4、flv.js下载,构建:

Github:https://github.com/Bilibili/flv.js

解压后进入mater:

构建:

1

2

3

npm install

npm install -g gulp

gulp release 

 在dist下生成了我们需要的js

flv.html:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

 

    ="text/html; charset=utf-8" http-equiv="Content-Type">

 

</head>

 

 

srs低延时配置:

1

2

3

4

5

6

7

8

9

10

vhost __defaultVhost__ {

    gop_cache       off;

    queue_length    10;

    min_latency     on;

    mr {

        enabled     off;

    }

    mw_latency      100;

    tcp_nodelay     on;

}

 

video低延时:

1

2

3

4

5

6

7

8

9

10

videoElement.addEventListener('progress', function() {

    var range = 0;

    var bf = this.buffered;

    var time = this.currentTime;

 

    while(!(bf.start(range) <= time && time <= bf.end(range))) {

        range += 1;

    }

    this.currentTime = this.buffered.end(range) - 0.01;

});

 设置video低延时会触发waiting事件,出现一个圆圈和降低屏幕亮度,有待处理...

 这样大概可以把延时从2~3降到1秒左右。(环境不同可能有差别,在网线接交换机的情况下会比连WiFi要好)

延时和流畅不可兼得,需求不同要设置不同参数。

 

回到顶部

16、音频不同步和卡顿的解决

参考:https://github.com/Bilibili/flv.js/issues/136

解决方法是 fixAudioTimestampGap: false,注意这个配置要在config的位置

 

回到顶部

17、添加HLS流

官方文档:https://github.com/ossrs/srs/wiki/v3_CN_SampleHLS

1

2

3

4

5

6

7

8

9

10

11

12

13

14

vhost __defaultVhost__ {

...

 

    hls {

        enabled         on;

        hls_fragment    10;

        hls_window      60;

        hls_path        ./objs/nginx/html;

        hls_m3u8_file   [app]/[stream].m3u8;

        hls_ts_file     [app]/[stream]-[seq].ts;

        hls_dispose     10;

 

    }

}

 存在的问题:同一地址第一次正常,后面推的都不能看,第一次生成ts切片正常,后面的ts切片会重复丢弃和生成。

参考: 转hls输出时出现的问题 #894:https://github.com/ossrs/srs/issues/894

在SrsHls::on_unpublish的时候设置SrsHls::aac_samples=0后正常。

 

分类: server,python,直播

好文要顶 关注我 收藏该文  

懒企鹅
关注 - 5
粉丝 - 6

+加关注

1

0

« 上一篇:CentOS 6.8 部署django项目二
» 下一篇:HTTP协议学习笔记


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部