livego音视频实时传输开源服务器支持rtmp使用ffmpeg和ffplay

· 更新于

ffmpegffplaylivegortmp

22.04.25

1,说明

先说结果,延迟小于200ms,非常好。

测试服务器配置:腾讯轻量云服务2C4G 8M

github:https://github.com/gwuhaolin/livego

可以用docker运行。也可以源码编译。

2,服务器操作

下文在服务器centos/ubuntu使用源码编译运行:

`#1,先安装go语言 sudo yum install go git      #centos  sudo apt instll golang git   #ubnutu  #2,下载源码 git clone https://github.com/gwuhaolin/livego.git  #3,编译 cd livego go build    #二选一 make build  #二选一  4,运行 ./livego  5,输出如下内容 INFO[2022-04-25T14:48:37+08:00]      _     _            ____     | |   (_)_   _____ / ___| ___     | |   | \ \ / / _ \ |  _ / _ \     | |___| |\ V /  __/ |_| | (_) |     |_____|_| \_/ \___|\____|\___/         version: 0.0.15  INFO[2022-04-25T14:48:37+08:00] HLS server enable.... INFO[2022-04-25T14:48:37+08:00] RTMP Listen On :1935 INFO[2022-04-25T14:48:37+08:00] HTTP-API listen On :8090 INFO[2022-04-25T14:48:37+08:00] HLS listen On :7002 INFO[2022-04-25T14:48:37+08:00] HTTP-FLV listen On :7001`

3,推流操作

首先查询串流码

http://服务器ip:8090/control/get?room=abcde     #浏览器输入,查询串流码,data的内容

返回如下(码是假的,我编的):

{"status":200,"data":"rfBd78ti2SMtUuSgD5xAV0YU77zampta7Z7S575KLkIZ9PAm"}

终端推流操作

`#1,查询本地摄像头 ffmpeg -list_devices true -f dshow -i dummy  #2,返回信息如下 DirectShow video devices (some may be both video and audio devices) [dshow @ 000002bd2faaf0c0]  "Integrated Camera" [dshow @ 000002bd2faaf0c0]     Alternative name "@device_pnp_\\?\usb#vid_04f2&pid_b6xxxxxxxxxxxxxx我瞎编的"  #3,得到设备名 "Integrated Camera"  #推流 ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -vf scale=iw/2:-1 -f flv rtmp://服务器ip:1935/live/rfBd78ti2SMtUuSgD5xAV0YU77zampta7Z7S575KLkIZ9PAm`

4,拉流

`ffplay -fflags nobuffer -flags low_delay -i rtmp://49.234.16.22:1935/live/abcde`

5,总结

试验了SRS和livego,发现还是livego的延迟低,小于200ms,实测不知道多少。

经过验证,如果用obs推流,速度会慢30ms

还需要学习ffmpeg和ffplay命令设置,找到最好的状态。

还需要研究服务器如何自动运行./livego命令,而不是人工手动命令行输入。