windows下srs流媒体服务器利用ffmpeg推流

打印 上一主题 下一主题

主题 804|帖子 804|积分 2412

安装windows版本srs

下载链接:Windows | SRS
执行下令:
ffmpeg推流下令:


   ffmpeg -i "rtsp://admin@xxzx@192.168.1.64:554/Streaming/Channels/101" -c:v copy -c:a aac  -f flv "rtmp://localhost:1935/live/stream"
  1. 推流本地摄像头到流媒体服务器

实用于将本地摄像头实时推流到 RTMP 服务器。
   ffmpeg -f v4l2 -i /dev/video0 -f flv rtmp://localhost:1935/live/stream
  添加音频(麦克风)

   ffmpeg -f v4l2 -i /dev/video0 -f alsa -i hw:0 -f flv rtmp://localhost:1935/live/stream
  

  • 更换 /dev/video0 为摄像头装备路径。
  • 更换 hw:0 为音频输入装备路径(可用 arecord -l 查看装备列表)。

2. 推流本地视频文件

将本地已有的视频文件推送到流媒体服务器。
   ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -f flv rtmp://localhost:1935/live/stream
  

  • -re:以文件的原始播放速度(实时)举行推流。
  • input.mp4:本地视频文件路径。
  • -c:v libx264:利用 H.264 编码。
  • -preset veryfast:优化推流速度。

3. 推流本地屏幕录制

将本地屏幕捕获后推流到流媒体服务器。
Linux

   ffmpeg -f x11grab -i :0.0 -f flv rtmp://localhost:1935/live/stream
  

  • :0.0:代表表现器,实用于 X11 体系。
Windows

   ffmpeg -f gdigrab -i desktop -f flv rtmp://localhost:1935/live/stream
  

  • gdigrab:Windows 的屏幕捕获接口。

4. 推流网络视频流

将网络上的视频流(如 HTTP 或 RTSP)转推到 RTMP 流媒体服务器。
HTTP 流

   ffmpeg -re -i http://example.com/stream.m3u8 -c:v libx264 -f flv rtmp://localhost:1935/live/stream
  RTSP 流

   ffmpeg -i rtsp://username:password@192.168.1.100:554/stream -f flv rtmp://localhost:1935/live/stream
  
5. 推流实时生成的视频内容

通过 ffmpeg 自定义生成实时视频并推送到流媒体服务器。
生成一个固定颜色的视频流推送

   ffmpeg -f lavfi -i color=c=blue:s=1280x720:r=30 -f flv rtmp://localhost:1935/live/stream
  

  • color=c=blue:生成蓝色画面。
  • s=1280x720:分辨率为 1280x720。
  • r=30:帧率为 30 fps。
生成动态噪点视频流

   ffmpeg -f lavfi -i testsrc=s=1280x720:r=30 -f flv rtmp://localhost:1935/live/stream
  
6. 推流实时写入的文件

从一个实时更新的文件中读取内容举行推流。
   ffmpeg -re -i fifo_input.mp4 -c:v libx264 -f flv rtmp://localhost:1935/live/stream
  

  • 这里的 fifo_input.mp4 是一个动态写入的文件(比方,背景程序不断更新)。

7. 推流实时摄像头 + 视频叠加

将本地摄像头流与叠加的文字/图片组合后推流。
叠加文字

   ffmpeg -f v4l2 -i /dev/video0 -vf "drawtext=text='Live Stream':fontcolor=white:fontsize=24:x=10:y=10" -f flv rtmp://localhost:1935/live/stream
  叠加图片

   ffmpeg -f v4l2 -i /dev/video0 -i overlay.png -filter_complex "[0:v][1:v] overlay=10:10" -f flv rtmp://localhost:1935/live/stream
  
8. 推流屏幕+摄像头画中画

将屏幕录制和摄像头画面举行画中画组合后推流。
   ffmpeg -f x11grab -i :0.0 -f v4l2 -i /dev/video0 -filter_complex "[0:v][1:v] overlay=W-w-10:H-h-10" -f flv rtmp://localhost:1935/live/stream
  

  • W-w-10:H-h-10:将摄像头画面放置在屏幕画面的右下角。

9. 推流音频(如麦克风或音频文件)

单独推送音频流到服务器。
推流本地麦克风

   ffmpeg -f alsa -i hw:0 -f flv rtmp://localhost:1935/live/stream
  推流音频文件

   ffmpeg -re -i input.mp3 -f flv rtmp://localhost:1935/live/stream
  
10. 推流实时截取内容

仅截取一段时间内的内容推流。
   ffmpeg -re -ss 00:01:00 -t 00:00:30 -i input.mp4 -f flv rtmp://localhost:1935/live/stream
  

  • -ss:指定开始时间(1分钟)。
  • -t:指定持续时间(30秒)。

11. 转推流

将一个 RTMP 流转发到另一个 RTMP 流服务器。
   ffmpeg -i rtmp://source-server/live/stream -c copy -f flv rtmp://target-server/live/stream
  

  • -c copy:不重新编码,直接转发。

12. 推流分辨率/帧率/码率优化

优化分辨率、帧率和码率来控制推流质量。
   ffmpeg -f v4l2 -i /dev/video0 -s 1280x720 -r 30 -b:v 1000k -f flv rtmp://localhost:1935/live/stream
  

  • -s 1280x720:设置分辨率为 1280x720。
  • -r 30:设置帧率为 30 fps。
  • -b:v 1000k:限定视频码率为 1000 kbps。

FFmpeg解决耽误

1. 降低编码耽误

利用低耽误编码设置

默认编码会注意压缩服从,但会增长耽误。可以利用以下参数降低耽误:
   ffmpeg -re -i input.mp4 -c:v libx264 -preset ultrafast -tune zerolatency -f flv rtmp://localhost:1935/live/stream
  

  • -preset ultrafast:利用最快的编码预设(牺牲一些压缩率)。
  • -tune zerolatency:专为低耽误流媒体优化。
  • -g 30:设置关键帧间隔(GOP),较小的值可降低耽误,保举设置为帧率的 1 倍(如 30 fps 时设置为 30)。
  • -r 30:限定帧率以减轻处置惩罚压力。

2. 调解缓冲设置

RTMP 缓冲设置



  • RTMP 推流默认会有缓冲,可以通过以下方式镌汰缓冲区引起的耽误:
   ffmpeg -re -i input.mp4 -c:v libx264 -preset ultrafast -tune zerolatency -rtmp_buffer 100 -f flv rtmp://localhost:1935/live/stream
  

  • -rtmp_buffer 100:设置 RTMP 缓冲区为 100 毫秒(默认较高)。
  • -flvflags no_duration_filesize:不传递文件时长和大小(镌汰不必要的数据传输)。

3. 镌汰音频编码耽误

音频的编码和缓冲也大概增长耽误。优化参数如下:
   ffmpeg -re -i input.mp4 -c:a aac -b:a 64k -ar 44100 -ac 2 -af aresample=async=1 -f flv rtmp://localhost:1935/live/stream
  

  • -c:a aac:利用 AAC 音频编码。
  • -b:a 64k:降低音频码率以减小带宽占用。
  • -ar 44100:设置音频采样率。
  • -af aresample=async=1:启用音频同步以降低耽误。

4. 优化网络传输

网络传输速度和稳固性直接影响耽误,可以通过以下方式优化:
设置 UDP 推流

假如目标支持,利用 UDP 而非 RTMP,可进一步降低耽误:
   ffmpeg -re -i input.mp4 -c:v libx264 -preset ultrafast -tune zerolatency -f mpegts udp://<ip>:<port>
  

  • 更换 <ip>:<port> 为目标服务器的 IP 和端口。

利用自定义 RTMP 超时时间

调解 RTMP 超时设置,镌汰网络传输的额外耽误:
   ffmpeg -re -i input.mp4 -c:v libx264 -preset ultrafast -tune zerolatency -timeout 1000000 -f flv rtmp://localhost:1935/live/stream
  

  • -timeout 1000000:设置网络超时时间(单位:微秒)。

5. 优化服务器端设置

推流的耽误不光由 ffmpeg 决定,还受服务器(如 Nginx RTMP 或 Wowza)影响。
优化 Nginx RTMP 设置

在 nginx.conf 中优化以下参数:
   rtmp { server { listen 1935; chunk_size 4096; # 减小 chunk_size 降低耽误(单位:字节) application live { live on; gop_cache off; # 禁用 GOP 缓存以降低耽误 sync 10ms; # 同步时间戳(低值可降低耽误) publish_notify on; # 启用推流状态关照 } } }
  
6. 硬件加速

假如你利用的机器性能有限,可以启用硬件加速来镌汰耽误。
Intel Quick Sync

   ffmpeg -re -i input.mp4 -c:v h264_qsv -preset ultrafast -tune zerolatency -f flv rtmp://localhost:1935/live/stream
  NVIDIA GPU (NVENC)

   ffmpeg -re -i input.mp4 -c:v h264_nvenc -preset p1 -tune ll -f flv rtmp://localhost:1935/live/stream
  

  • -preset p1:最快的 NVENC 预设。
  • -tune ll:为低耽误优化。

7. 监控耽误效果

可以利用 ffprobe 检测流的耽误:
   ffprobe -i rtmp://localhost:1935/live/stream -show_entries frame=pkt_pts_time -select_streams v:0
  实时监控帧时间戳,判断耽误效果。

8. 综合低耽误推流示例

整合以上优化,实用于大多数场景的低耽误推流:
   ffmpeg -re -i input.mp4 -c:v libx264 -preset ultrafast -tune zerolatency -g 30 -rtmp_buffer 100 \ -c:a aac -b:a 64k -af aresample=async=1 -f flv rtmp://localhost:1935/live/stream
   

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表