SRS(简单实时视频服务) 笔记(4)- 截图

1.背景

SRS流媒体服务部署起来之后,需要实现 截图 功能。本文是实现过程。

2. 思路

可选有两种方式实现。方式1:HTTP回调+自建服务
步骤如下:

  • 1、启动一个HTTP服务,这个服务可以接收来自 SRS 的HTTP回调
  • 2、启动SRS,
  • 3、当客户端发布流时SRS触发回调事件 on_publish,on_unpublish ,会发送 HTTP请求到第一步的“HTTP服务”
  • 4、“HTTP服务” 从请求中获得流地址,通过 ffmpeg 工具截图。

方式2:使用Transcoder直接截图
步骤如下:

  • 1、在SRS 启配置一个 transcode 服务
  • 2、当流输入时,即通过 ffmpeg 工具截图

3. 实现示例

方式1:HTTP回调+自建服务

**(1) 启动一个HTTP服务
从SRS源代码中找到文件夹 trunk/research/api-server ,这里有个 python 脚本,把它跑起来。注意它依赖 ffmpeg 工具。

(2) 配置 SRS

SRS的配置如下:

# snapshot.conf
listen              1935;
max_connections     1000;
daemon              off;
srs_log_tank        console;
vhost __defaultVhost__ {
    http_hooks {
        enabled on;
        on_publish http://127.0.0.1:8085/api/v1/snapshots;
        on_unpublish http://127.0.0.1:8085/api/v1/snapshots;
    }
    ingest {
        enabled on;
        input {
            type file;
            url ./doc/source.200kbps.768x320.flv;
        }
        ffmpeg ./objs/ffmpeg/bin/ffmpeg;
        engine {
            enabled off;
            output rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
        }
    }
}

在上面的配置中,它指定了 http_hooks 配置,并指示了 on_publish和 on_unpublish 事件。当客户端开始推送流时,将触发事件,发送HTTP请求。

这里配置文件里的 ingest 配置项 是 模拟了一个 输入,它指定了一个 flv 文件,并开始推送流。

(3) 启动SRS
启动SRS后,会从 ./doc/source.200kbps.768x320.flv 这个路径的文件推流 。然后就可以在 HTTP服务的 /api-server/static-dir/live 文件夹下找到图片。

方式2:使用Transcoder直接截图

Transcoder直接截图 的方式比较简单。修改 SRS 的配置文件:

listen              1935;
max_connections     1000;
daemon              off;
srs_log_tank        console;
vhost __defaultVhost__ {
    transcode {
        enabled on;
        ffmpeg ./objs/ffmpeg/bin/ffmpeg;
        engine snapshot {
            enabled on;
            iformat flv;
            vfilter {
                vf fps=1;
            }
            vcodec png;
            vparams {
                vframes 6;
            }
            acodec an;
            oformat image2;
            output ./objs/nginx/html/[app]/[stream]-%03d.png;
        }
    }
    ingest {
        enabled on;
        input {
            type file;
            url ./doc/source.200kbps.768x320.flv;
        }
        ffmpeg ./objs/ffmpeg/bin/ffmpeg;
        engine {
            enabled off;
            output rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
        }
    }
}

解释:

这个配置文件 配置一个 ingest ,它从 ./doc/source.200kbps.768x320.flv 文件生成推流。

transcode 配置项指定了一个 转码器,配置了 ffmpeg 生成 png 图片的截图。

4. 扩展

我的示例
代码示例在Github见:https://github.com/vir56k/demo/tree/master/video_srs

Docker 相关的指令
我是用 docker 来示例的,列出我的指令:

docker run --rm -p 8085:8085 --name=api --network=host  -v ~/Downloads/srs/objs/:/objs api

docker run --rm -p 1935:1935 -p 1985:1985 -p 8080:8080 --name srs --network=host  -v ~/Downloads/srs/conf/:/usr/local/srs/conf/ -v ~/Downloads/srs/objs/:/usr/local/srs/objs/ -v ~/Downloads/srs/doc/:/usr/local/srs/doc/ ossrs/srs:3

5. 参考

https://gitee.com/winlinvip/srs.oschina/wikis/v4_CN_Snapshot?sort_id=3298613

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值