将普通视频切片,并基于nginx搭建m3u8视频流媒体服务

Scroll Down

1.安装nginx

请看这篇:安装nginx

2.安装ffmpeg

视频切片需要使用ffmpeg,为了方便,直接用docker部署ffmpeg服务。

2.1 docker-compose.yml文件

version: '3.9'
services:
    ffmpeg:
        image: jrottenberg/ffmpeg
        entrypoint: bash
        volumes:
            - '/opt/video:/tmp/workdir'
        ports:
            - '8765:8080'
        container_name: ffmpeg
        tty: true
        stdin_open: true
  • /opt/video为处理视频的文件夹(宿主机目录)

2.2 启动容器

docker compose up -d

3.切片

3.1 将原视频放入/opt/video文件夹

aaa.mov

3.2 进入容器

docker exec -it ffmpeg bash

3.3 执行切片命令

ffmpeg \
-i aaa.mov \
-hls_time 10 \
-hls_list_size 0 \
-hls_segment_filename ./hls/aaa_%05d.ts \
./hls/aaa.m3u8
  • aaa.mov为原视频,切片的成品为ts文件盒m3u8文件。ts是切片视频文件,m3u8为索引文件。
  • hls_time是每个切片的时间,这里为10秒。

如果目录没有在/opt/video目录下,需要将视频拷到该目录下,或者复制到容器里,复制到容器可以用以下命令。

docker cp  [原视频路径] [容器id]:/tmp/workdir

4.配置nginx.conf

/usr/local/nginx/conf目录下。

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen 8098;
	    root /opt/video;
        location /video {
            root /opt/video;  # 视频文件所在目录
            add_header Cache-Control no-cache;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Credentials' 'true';
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
        }
    }

}

5.启动nginx

/usr/local/nginx/sbin目录下。

./nginx

如果已经启动,则刷新配置。

./nginx -s reload

6.播放视频

访问以下链接播放视频。

http://ip:8098/aaa.m3u8

电脑端直接使用浏览器可能无法直接播放,需要安装插件,手机端浏览器可以直接播放。或者电脑端使用播放器播放。