ffmpeg及点播直播推流的一些总结

  公司最近在搞直播项目,需要涉及很多流媒体知识,疯狂查阅各种资料,恶补几天之后,总算对搭建流媒体服务器有了一些理解。将目前了解的一些知识和命令记录下来,以备以后查阅。
  公司之前只有视频点播,我这边用ffmpeg、nginx-rtmp-module搭建一个流媒体服务器就可以实现流媒体格式视频的播放。那时候不需要live功能,所以其实对ffmpeg及nginx-rtmp-module一知半解却也够用了。如今需求需要从本地摄像头、本地音频设备、本地屏幕抓取、还有网络摄像头都能获取到视频流,实时传输到服务器中,且推送至客户端实现直播,这就有点不知从何入手了。后来通过查询各种资料,倒是一一解决了,记录一下。流程分类初步分为流媒体输入、服务器接收、客户端接收,至于编码封装等参数,那些再根据具体化需求再改,本文暂且不提。

流媒体输入

直播网络摄像头视频流

  我们公司使用的是海康威视的网络摄像头,倒是可以按照大多数网上的教程调用自带APK,来做定制化控制。还有一个获取海康威视摄像头的视频流的简易方法就是去默认rtsp路径拉流。
海康威视摄像头rtsp数据流的地址为:
rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream

说明:
username: 用户名。例如admin。
password: 密码。例如12345。
ip: 为设备IP。例如 192.0.0.64。
port: 端口号默认为554,若为默认可不填写。
codec:有h264、MPEG-4、mpeg4这几种。
channel: 通道号,起始为1。例如通道1,则为ch1。
subtype: 码流类型,主码流为main,辅码流为sub。

  而我们可以直接通过ffmpeg直接拉流并推送至之前搭建好的nginx-rtmp流媒体服务器或者rtsp流媒体服务器中。
  转发rtsp流命令为
ffmpeg -i "rtsp://username:pasword@ip:554/h254/ch1/main/av_stream" -c copy -f rtsp rtsp://serverip/live
  这个命令可以实现从网络摄像头中拉取rtsp流并推流到已有的rtsp服务器中。在流媒体服务器中可以用再使用EasyDarwin来查看或者停止推来的rtsp流。-i是选择流媒体数据从哪里输入,-c copy是完全复制保持原本默认参数,如果对视频音频有具体要求,可以改为其他参数,-f rtsp rtsp://serverip/live是将输出格式设置为rtsp流媒体数据流,并推送至serverip服务器的live路径中,客户端可以直接用vlc等其他流媒体工具从rtsp://serverip/live链接中拉流。
  如果直接使用OBS来直播就更省事了,新版本的OBS中支持VLC视频流,直接在输入中添加,然后选择网络摄像头的url即可实现拉流直播(如下图所示)。
VLC视频源
OBS网络摄像头
  这里需要特别注意的是,想添加此类型视频源,需要提前安装VLC才支持,否则添加来源处不会显示这个VLC视频源选项的。安装后不需要开启VLC,不过需要重启OBS。

直播本地摄像头视频音频流

  ffmpeg命令可以检索发现本地摄像头设备,并从中获取视频流。
  查看本机电脑的设备,找到摄像头设备名及麦克风设备名
ffmpeg -list_devices true -f dshow -i dummy
  将视频流推至服务器
ffmpeg -f dshow -i video="Lenovo EasyCamera":audio="麦克风 (Realtek High Definition Audio)" -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -f flv rtmp://serverip/live
参数说明:

-f dshow 多媒体流类型指定为从设备中获取
-vcodec libx264 强制使用libx264编解码方式。 如果用copy表示原始编解码数据必须被拷贝
-acodec copy 意味不指定音频编码,采用原本的编码集
-preset:v ultrafast 指定编码速度为ultrafast(超快),级别有ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow and placebo,编码加速意味着信息丢失越严重,输出图像质量越差,不过这个选项可以大大降低延迟,相反,如果追求视频质量,可以用 -preset:v slow 等等
-tune:v zerolatency 调整0延迟,可以大大降低直播延迟。
-f flv rtmp 表示输出为rtmp协议的flv流媒体格式
-copyinkf 此外,可加入此选项解决FFMPEG采集音视频时不同步的问题

  如果使用OBS,则就更傻瓜式操作了,并且也不需要考虑不同设备的数据采集及混流的问题了,这里就不再赘述了。

服务器接收

  这需要根绝客户端推来的视频流格式来选择了,接收rmtp流比较理想的方案是nginx-rtmp-module来实现,这个模块设计的已经很完善了,里面有很多接口可以调用,相关资料可以查阅官方文档
  rtsp流可以试试easydrawin这个开源项目,部署挺简单的,也不用配置,还有一个可视化的界面来管理每一个流,不过有差不多两年没更新了,这是官方文档
。。。

客户端接收

。。。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MicePro

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

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

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

打赏作者

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

抵扣说明:

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

余额充值