直播系统推拉流原理 永久链接

解决方案

直播系统推拉流原理

本文介绍了直播系统推拉流的基本原理,包括推流和拉流的过程、协议选择、关键指标等。

直播系统推拉流原理概述

直播系统的核心功能是实现主播端视频采集后的实时传输,以及观众端的实时观看。整个过程主要包含:推流、服务器处理、拉流三个环节。

核心概念解析

1. 推流(Push)

推流是指主播端将视频数据传输到服务器的过程。主要使用 RTMP 协议(Real Time Messaging Protocol)。

比如可能有如下推流 URL 的生成逻辑:

public static String generatePushUrl(String pushDomain, String pushKey, String appName, String streamName, long expireTime) {
    String pushUrl = "";
    // 推流域名未开启鉴权功能的情况下
    if (StringUtils.isBlank(pushKey)) {
        pushUrl = "rtmp://" + pushDomain + "/" + appName + "/" + streamName;
    } else {
        long timeStamp = System.currentTimeMillis() / 1000L + expireTime;
        String stringToMd5 = "/" + appName + "/" + streamName + "-" + Long.toString(timeStamp) + "-0-0-" + pushKey;
        String authKey = md5(stringToMd5);
        pushUrl = "rtmp://" + pushDomain + "/" + appName + "/" + streamName + "?auth_key=" + Long.toString(timeStamp) + "-0-0-" + authKey;
    }
    return pushUrl;
}

推流地址的组成部分:

  • rtmp:// - 协议
  • pushDomain - 推流域名
  • appName - 应用名称
  • streamName - 流名称
  • auth_key - 鉴权参数(可选)

2. 拉流(Pull)

拉流是观众观看直播的过程。支持多种协议:

  • RTMP:延迟低(1-3秒)
  • HTTP-FLV:延迟适中(2-5秒)
  • HLS(m3u8):延迟较高(5-30秒)
// FLV 格式
public static String generalPullUrlFlv(String pullDomain, String pullKey, String appName, String streamName, long expireTime) {
    if (StringUtils.isBlank(pullKey)) {
        return "http://" + pullDomain + "/" + appName + "/" + streamName + ".flv";
    }
    // ... 鉴权逻辑
}

// HLS 格式
public static String generalPullUrlHls(String pullDomain, String pullKey, String appName, String streamName, long expireTime) {
    if (StringUtils.isBlank(pullKey)) {
        return "http://" + pullDomain + "/" + appName + "/" + streamName + ".m3u8";
    }
    // ... 鉴权逻辑
}

直播流程

  1. 主播开播

    • 系统生成唯一的 streamId
    • 生成带鉴权的推流地址
    • 主播端推流软件(如 OBS)开始推流
  2. 服务器处理

    • 流媒体服务器接收推流
    • 进行转码、录制等处理
    • 将流分发到 CDN 节点
  3. 观众观看

    • 获取对应格式的拉流地址
    • 通过播放器拉取直播流
    • 实现实时观看

实现建议

  1. 选择合适的流媒体服务器

    • 商业云服务:阿里云直播、腾讯云直播
    • 开源方案:SRS、Nginx-RTMP
  2. 根据业务场景选择协议

    • 普通直播:HTTP-FLV
    • 低延迟场景:RTMP
    • 移动端兼容性要求高:HLS
  3. 关注关键指标

    • 延迟控制
    • 卡顿率
    • 首屏时间
    • 带宽成本
  4. 安全鉴权:

    • 防盗链机制

来自开放网络的回应

引用、喜欢、转发和站外回复会通过 Webmention 回到这里。

接收与展示代码已经就绪,注册正式域名后即可开始收集回应。

评论

评论由 GitHub Discussions 保存和管理。