深入浅出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); // 降低帧率
}
七、完整推流流程
- 初始化:
- 配置相机参数
- 连接RTSP服务器
- 推流:
- 获取摄像头帧
- 编码为H.264
- 通过RTP传输
- 结束:
- 发送TEARDOWN指令
- 释放资源
八、RTSP vs 其他协议
| 协议 | 延迟 | 适用场景 | 特点 |
|---|---|---|---|
| RTSP | 1-3秒 | 监控/直播 | 支持控制命令 |
| RTMP | 2-5秒 | 直播推流 | Flash时代主流 |
| HLS | 10+秒 | 点播/直播 | 苹果生态首选 |
| WebRTC | <1秒 | 实时通信 | 浏览器原生支持 |
九、终极口诀
"RTSP就像遥控器,控制视频流转发
先问再建通道,DESCRIBE和SETUP
安卓推流用FFmpeg,H.264编码效率佳
参数调优降延迟,网络自适应保流畅"
掌握RTSP推流,你就能轻松搭建自己的视频直播系统! 📹🚀