# 流媒体

# 常用的传输协议

  • HLS

Http Live Streaming,由 Apple 公司提出的,基于 HTTP 的流媒体网络传输协议。基本原理是将流媒体切成一段一段的视频文件
优点:不同速率自由切换,浏览器 Video 可直接播放
缺点:延迟很大 10s 以上

  • RTMP

Real-Time Message Protocol,由 Adobe 公司提出的流媒体协议,未完全公开,一般传输的是 flv,f4v 格式的视频流,在 TCP 的 1 个通道上传输命令和数据
优点:低延迟,稳定
缺点:私有协议,兼容性差,容易被防火墙阻拦

  • RTSP

Real-Time Stream Protocol 由 Real Neworks 和 Netscape 共同提出的流媒体协议,是共有协议,有专门机构负责维护,RTSP 一般传输的是 TS,mp4 格式的视频流,传输一般需要 2-3 个通道,命令和数据通道分离
优点:实时效果很好
缺点:浏览器不能直接播放

# 推流

# 本地文件转RTMP
ffmpeg -re -i input.mp4 -c copy -f flv  rtmp://localhost:1935/live/filetortmp

# 本地文件切片为hls m3u8

ffmpeg -i input.mp4 -c copy -f segment -segment_list ./hls/live.m3u8 -segment_time 2  ./hls/live%03d.ts

# 本地文件转HLS
ffmpeg  -re -i input.mp4 -c:v h264 -flags +cgop -g 30 -hls_time 1 -hls_flags delete_segments ./hls/live.m3u8

# RTSP转RTMP
ffmpeg -i rtsp://192.168.0.10:554 -f flv rtmp://127.0.0.1:1935/live/rtsptortmps


# RTSP转HLS
ffmpeg -i rtsp://192.168.0.10:554 -c:v h264 -flags +cgop -g 30 -hls_time 1 -hls_flags delete_segments ./hls/live.m3u8
# -c:v h264 指定编解码器
# -flags +cgop

NodeMediaServer

https://github.com/illuspas/Node-Media-Server

# 拉流

ffmpeg -i rtmp://rtmp.gausszhou.top/live

# 播放

hls

  • video 标签直接播放 m3u8 文件 hls
  • flv.js 播放 flv 文件

rtmp

video.js 播放 rtmp 视频流---需要 flash

rtsp

  • VlC 插件将 rtsp 转成 ogg---需要安装浏览器插件
  • RTSP 转 RTMP rtsp-->ffmpeg+nginx+video.js-->rtmp
  • RTSP 转 HLS rtsp-->ffmpeg+video.js-->hls
  • RTSP 转 WebRTC github.com/deepch/RTSPtoWebRTC