深入浅出RTSP推流

377 阅读2分钟

深入浅出RTSP推流

一、RTSP是啥?

RTSP(Real Time Streaming Protocol)就像视频直播的遥控器

  • 作用:控制视频流的播放、暂停、录制
  • 特点:实时性强,适合监控摄像头、直播等场景
  • 类比
    • 像用电视遥控器换台(控制流媒体)
    • 不直接传数据,只发控制指令

二、RTSP推流原理

sequenceDiagram
    推流端->>RTSP服务器: 1. OPTIONS (问问能干啥)
    RTSP服务器-->>推流端: 2. 回复支持的方法
    推流端->>RTSP服务器: 3. DESCRIBE (要视频信息)
    RTSP服务器-->>推流端: 4. 返回SDP描述
    推流端->>RTSP服务器: 5. SETUP (建立传输通道)
    RTSP服务器-->>推流端: 6. 确认通道
    推流端->>RTSP服务器: 7. PLAY (开始推流)
    RTSP服务器-->>推流端: 8. 返回200 OK
    推流端->>RTSP服务器: 持续发送RTP包

三、安卓RTSP推流实战

1. 准备工作

// 添加依赖
dependencies {
    implementation 'org.bytedeco:javacv:1.5.7'
    implementation 'org.bytedeco:ffmpeg-platform:4.4-1.5.7'
}

2. 摄像头采集推流

// 创建FFmpegFrameRecorder
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(
    "rtsp://192.168.1.100:8554/live", 
    imageWidth, imageHeight);
recorder.setFormat("rtsp");
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
recorder.setFrameRate(30);
recorder.start();

// 从Camera获取数据
Camera.PreviewCallback previewCallback = (data, camera) -> {
    // 转换数据为Frame
    Frame frame = convertToFrame(data);
    recorder.record(frame);
};

camera.setPreviewCallback(previewCallback);

3. 关键参数说明

参数示例值作用
RTSP地址rtsp://ip:port/stream服务器接收地址
视频编码H.264最广泛支持的编码
分辨率1280x720根据网络调整
帧率30fps流畅度与带宽平衡

四、搭建简易RTSP服务器

1. 用FFmpeg模拟服务器

# 接收RTSP流并转存文件
ffmpeg -rtsp_flags listen -i rtsp://0.0.0.0:8554/live -c copy output.mp4

2. 专业服务器推荐

  • EasyDarwin:开源RTSP服务器
  • Wowza:企业级流媒体服务器
  • Nginx+RTP模块:高性能方案

五、避坑指南

1. 常见问题

  • 连接失败:检查端口是否开放(默认554)
  • 花屏/卡顿:调整比特率 recorder.setVideoBitrate(2000000)
  • 延迟高:使用TCP传输(默认UDP)
    recorder.setOption("rtsp_transport", "tcp");
    

2. 安卓特殊处理

  • Camera2 API:推荐用Camera2替代旧Camera API
  • 权限申请:需要摄像头+录音+网络权限
  • 后台保活:使用前台Service防止被杀死

六、优化技巧

1. 参数调优

// H.264参数优化
recorder.setVideoOption("preset", "ultrafast"); // 编码速度
recorder.setVideoOption("tune", "zerolatency"); // 低延迟
recorder.setVideoOption("crf", "28"); // 质量与体积平衡

2. 网络自适应

// 根据网络状况动态调整
if (networkIsPoor) {
    recorder.setVideoBitrate(500000); // 降低码率
    recorder.setFrameRate(15);       // 降低帧率
}

七、完整推流流程

  1. 初始化
    • 配置相机参数
    • 连接RTSP服务器
  2. 推流
    • 获取摄像头帧
    • 编码为H.264
    • 通过RTP传输
  3. 结束
    • 发送TEARDOWN指令
    • 释放资源

八、RTSP vs 其他协议

协议延迟适用场景特点
RTSP1-3秒监控/直播支持控制命令
RTMP2-5秒直播推流Flash时代主流
HLS10+秒点播/直播苹果生态首选
WebRTC<1秒实时通信浏览器原生支持

九、终极口诀

"RTSP就像遥控器,控制视频流转发
先问再建通道,DESCRIBE和SETUP
安卓推流用FFmpeg,H.264编码效率佳
参数调优降延迟,网络自适应保流畅"

掌握RTSP推流,你就能轻松搭建自己的视频直播系统! 📹🚀