HLS流媒体服务器

487 阅读2分钟

HLS简介

作为 Apple 提出的一种基于 HTTP 的协议,HLS(HTTP Live Streaming)用于解决实时音视频流的传 输。尤其是在移动端,由于 iOS /H5 不支持 flash,使得 HLS 成了移动端实时视频流传输的首选。HLS 经常用在直播领域,一些国内的直播云通常用 HLS 拉流(将视频流从服务器拉到客户端)。 HLS 值得诟 病之处就是其延迟严重,延迟通常在 10-30s 之间。

框架

image.png

安装HLS服务器

本次服务器搭建使用的是SRS,具体编译步骤可以参考 juejin.cn/post/740626…

SRS服务器配置文件

文件为conf/srs.conf

➜  trunk git:(v6.0.48) ✗ cat conf/srs.conf
# main config for srs.
# @see full.conf for detail config.

listen              1935;
max_connections     1000;
srs_log_tank        file;
srs_log_file        ./objs/srs.log;
daemon              on;
http_api {
    enabled         on;
    listen          1985;
}
http_server {
    enabled         on;
    listen          8080;
    dir             ./objs/nginx/html;
}
rtc_server {
    enabled on;
    listen 8000; # UDP port
    # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidate
    candidate $CANDIDATE;
}
vhost __defaultVhost__ {
    hls {
        enabled         on;
        hls_path        ./objs/nginx/html;  # 生成ts文件的路径
        hls_fragment    5;                  # 分片时长,秒为单位
        hls_window      25;                 # 最大缓存时长,秒
    }
    http_remux {
        enabled     on;
        mount       [vhost]/[app]/[stream].flv;
    }
    rtc {
        enabled     on;
        # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtc
        rtmp_to_rtc off;
        # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmp
        rtc_to_rtmp off;
    }

    play{
        gop_cache_max_frames 2500;
    }
}

启动服务

➜  trunk git:(v6.0.48) ✗ objs/srs -c conf/srs.conf 
[2024-08-27 21:26:38.432][INFO][31751][46599qb6] XCORE-SRS/6.0.48(Bee)
[2024-08-27 21:26:38.433][INFO][31751][46599qb6] config parse complete
[2024-08-27 21:26:38.434][INFO][31751][46599qb6] you can check log by: tail -n 30 -f ./objs/srs.log
[2024-08-27 21:26:38.434][INFO][31751][46599qb6] please check SRS by: ./etc/init.d/srs status

查看下监听端口

➜  trunk git:(v6.0.48) ✗ ss -tunlp | grep srs
udp   UNCONN 0      0                                 0.0.0.0:8000       0.0.0.0:*    users:(("srs",pid=31753,fd=13))           
tcp   LISTEN 0      512                               0.0.0.0:8080       0.0.0.0:*    users:(("srs",pid=31753,fd=12))           
tcp   LISTEN 0      512                               0.0.0.0:1935       0.0.0.0:*    users:(("srs",pid=31753,fd=10))           
tcp   LISTEN 0      512                               0.0.0.0:1985       0.0.0.0:*    users:(("srs",pid=31753,fd=11)) 

测试

使用ffmpeg推流

使用rtmp推流,HLS主要用在拉流上

ffmpeg -re -i akagi.flv -vcodec copy -acodec copy -f flv -y rtmp://192.168.0.11/live/livestream 

观看视频流

使用vlc播放

image.png

image.png