smart rtmpd web 接口分为下面几类

分类名称 功能描述
live 这个就是平常我们的直播播放接口
rec   这个就是平常我们的录像回放接口
vod   这个就是我们点播接口,支持字目录,对应服务器上的 vod 目录
api 主要是为了 web 管理预留的接口,当然前端页面可能也有可能用到
web 就是通用的 web 接口,比如:播放器页面和脚本通过这些接口下载和访问
ws_im 通过 websocket 实现的 IM 会话接口

web live 接口说明

功能:

用于直播流播放

格式:

# 直播播放
# HTTP GET
http://<服务器地址或域名>:[服务器端口]/live/<流的名字>.<类型>

例子:

http://192.168.1.1:8080/live/stream.flv

参数 说明
服务器地址 192.168.1.1 支持域名,支持 NAT 映射
服务器端口 8080
流的名字 stream 
类型 flv 也支持 m3u8, mpd 等

直播流推送成功后,WEB 服务端自动产生下面格式的流

类型 说明
flv 这个支持 http://192.168.1.1:8080/live/stream.flv 的播放, 同时也支持 ws://192.168.1.1:8080/live/stream.flv 的播放
hls 这个支持 http://192.168.1.1:8080/live/stream.m3u8 的播放
dash 这个支持 http://192.168.1.1:8080/live/stream.mpd 的播放

这些 URL 都是推流后,自动产生的,具体可以通过 http://192.168.1.1:8080/api/stream 进行查询所有的直播流

web rec 接口说明

功能:

用于录像查询和回放

smart rtmpd 的录像方式就是

# 推 rtmp 流进行直播并同时录像
rtmp://<服务器地址>:[服务器端口]/rec/<流的名字>

smart rtmpd 的录像都会自动存储到服务器的 rec 目录下,rec 目录下的一级子目录,就是上述 URL 中的服务器地址,比如:服务器有多个域名 www.qiyicc.com, www.smartrtmpd.com,那么 rec 目录下就会存在目录

编号 一级子目录
1 www.qiyicc.com
2 www.smartrtmpd.com

下面我们就这个 URL 展开说明

# 比如:推送下述两路流
rtmp://www.qiyicc.com/rec/music
rtmp://www.qiyicc.com/rec/class

那么上述两个录像 URL 会在服务器的目录 /rec/www.qiyicc.com/ 下产生二级子目录,一级子目录以服务器地址命名,二级字目录以流的名字命名

编号 二级子目录
1 music
2 class

二级子目录下,会按日期精确到天命名产生三级子目录

编号 三级子目录
1 2022-05-21
2 2022-05-22

三级子目录下会记录具体的录像文件,文件名字以时分秒进行命名,类型见文件后缀,目前只支持 m3u8 或 mpd ,建议用 m3u8 进行存储,具体参见 config.xml 里的说明

编号 录像文件
1 08-56-33.m3u8
2 09-12-35.m3u8

格式:

# 获取录像信息或播放录像文件
# HTTP GET
http://<服务器地址或域名>:[服务器端口]/rec/<流的名称>?[day=年月日]&[time=时分秒]

参数 说明
无参

查询录像日期列表,例子如下

请求:

http://192.168.1.1:8080/rec/stream

响应:

{
"dirs" :
[
"2022-05-21"
]
}
这表明此路录像只有 2022-05-21 那天有录像存在
day

查询指定日期录像文件列表表,例子如下

请求:

http://192.168.1.1:8080/rec/stream?day=2022-05-21

响应:

{
"files" :
[
"18-22-11.m3u8",
"18-24-33.m3u8",
"18-34-02.m3u8"
]
}
这表明此路录像 2022-05-21 存在三个时间点的录像,分别是 18-22-11, 18-24-33,18-34-02 
time

播放录像

此参数必须包含 day 参数,否则无效,直接播放此路录像,例子如下

请求:

http://192.168.1.1:8080/rec/stream?day=2022-05-21&time=18-22-11.m3u8

响应:

录像数据流,播放器拿到数据流就可以播放了

web vod 接口说明

功能:

用于点播的功能,用户可以把自己的 mp4, mkv或其它类型的视频文件放到服务器上的 /vod 目录下或此目录的子目录下,子目录可以动态创建,支持多级,用户端只要访问对应的 URL 就能实现点播了,推荐用 fmp4 格式的文件

格式:

# 获取点播信息或播放点播文件
# HTTP GET
http://<服务器地址或域名>:[服务器端口]/vod/[一级字目录]/[二级子目录]/<文件名>

例子:

http://192.168.1.1:8080/vod/sport/football/worldcup.mp4

参数 说明
sport 一级子目录
football 二级子目录
worldcup.mp4 视频文件

VOD 文件列表查询,参见下面的 web api 接口有关 vod 的说明

web api 接口说明

功能:

为后台 WEB 管理或 WEB 前端业务的需求,提供的综合接口。

 格式:

# HTTP GET,PUT
http://<服务器地址>:[服务器端口]/api/<业务标识>

业务标识 说明
live 直播信息查询接口
rec 录像信息查询接口
vod 点播信息查询接口
status 服务器状态查询接口
config 配置文件获取与设置接口
policy 服务器转发策略配置
statistics 服务器统计信息接口
  • 业务标识 live

    # 获取直播流相关信息
    # HTTP GET
    http://<服务器地址>:[服务器端口]/api/live

    参数 说明
    无参

    返回当前所有在线流列表,例子如下

    请求:

    http://192.168.1.1:8080/api/live

    响应:

    {
    "stream" :
    [
    "rtmp://192.168.1.1:1935/live/stream"
    ]
    }
    每路直播流的 RTMP 的 URL 列表
    vhost 直播流的 vhost 通常就是服务器地址
    app 直播流的 app 标签
    name

    直播流的名字  vhost, app, name 必须同时附带,请求返回此路流的详细信息,参数信息以 rtmp url 为主,默认端口可以不带,例子如下

    请求:

    http://192.168.1.1:8080/api/live?vhost=192.168.1.1:1935&app=live&name=stream

    因为 rtmp 默认端口是 1935,也可以写成

    http://192.168.1.1:8080/api/live?vhost=192.168.1.1&app=live&name=stream

    响应:

    {
    "audio" :
    {
    "channel" : "2",
    "codec" : "aac",
    "samplebit" : "16",
      "samplerate" : "44100"
    },
    "duration" : "PT7M50S",
    "from" : "rtmp",
    "rate" : "4.05 kb/s",
    "rec" : "none",
    "urls" :
    [
    {
    "type" : "rtmp",
    "url" : "rtmp://192.168.1.1:1935/live/stream"
    },
    {
    "type" : "http-flv",
    "url" : "http://192.168.1.1:8080/live/stream.flv"
    },
    {
    "type" : "ws-flv",
    "url" : "ws://192.168.1.1:8080/live/stream.flv"
    },
    {
    "type" : "http-hls",
    "url" : "http://192.168.1.1:8080/live/stream.m3u8"
    },
    {
    "type" : "http-dash",
    "url" : "http://192.168.1.1:8080/live/stream.mpd"
    },
    {
    "type" : "rtsp",
    "url" : "rtsp://192.168.1.1:8554/live/stream"
    },
    {
    "type" : "srt",
    "url" : "srt://192.168.1.1:9000/live/stream"
    }
    ],
    "video" :
    {
    "codec" : "h264",
    "fps" : "24",
    "gop" : "88",
    "height" : "562",
    "width" : "1000"
    }
    }
    cmd

    目前只支持 cmd=count,查询此路视频当前播放端的个数,这个肯定不是精确的统计,请求例子

    请求:

    http://192.168.1.1:8080/api/live?vhost=192.168.1.1:1935&app=live&name=stream&cmd=count

    响应 :

    rtmp:0
    flv:0
    rtsp:0
    后续可能修订为 json 格式
  • 业务标识 rec
    # 获取录像列表信息
    # HTTP GET
    http://<服务器地址>:[服务器端口]/api/rec

    参数 说明
    无参

    获取服务器上 /rec 目录下以服务器地址命名的目录下所有的录像名称列表,例子如下

    请求:

    http://192.168.1.1:8080/api/rec

    响应:

    {
    "dirs" :
    [
    "stream"
    ]
    }
    查询到一路录像,名字为 stream,不带参数,因此默认参数 vhost 为192.168.1.1
    vhos

    获取服务器上 /rec 目录下以 vhost 命名的目录下所有的录像名称列表,例子如下

    请求:

    http://192.168.1.1:8080/api/rec?vhost=www.qiyicc.com

    响应:

    {
    "dirs" :
    [
    "music",
      "sport"
    ]
    }
    查询到两路录像,名字为 music, sport

    对于整个录像流程建议如下:

    1. 利用 http://192.168.1.1:8080/api/rec 查询录像列表
    获取所有的录像名称 2. 利用 http://192.168.1.1:8080/rec/<流名称> 查询录像日期 3. 利用 http://192.168.1.1:8080/rec/<流名称>?day=xxxx-yy-zz 查询录像文件列表 4. 利用 http://192.168.1.1:8080/rec/<流名称>?day=xxxx-yy-zz&time=iiiii.m3u8 播放录像 具体使用方法,参见上述的 rec 章节说明

  • 业务标识 vod
    # HTTP GET
    http://192.168.1.1:8080/api/vod

    请求:
    http://192.168.1.1:8080/api/vod 响应: {
    "dirs" :
    [
    "discovery"
    ],
    "files" :
    [
    "video.mp4"
    ]
    }

    我们看到查询到一个子目录和一个文件



    查询子目录:

    请求:
    http://192.168.1.1:8080/api/vod/discovery 响应:
    {
    "dirs" :
      [
      ""
      ],
      "files" :
      [
      "river.mkv"
      ]
    }

    我们播放 VOD
    
    http://192.168.1.1:8080/api/vod/discovery/river.mkv

    上传点播视频到服务器
    
    # HTTP POST
    http://192.168.1.1:8080/vod/stream 支持多文件上传,可以利用 postman 进行实验

  • 业务标识 status
    # 获取服务器状态
    # HTTP GET
    http://192.168.1.1:8080/api/status 请求:
    http://192.168.1.1:8080/api/status 响应:
    {
    "http" :
    {
    "port" : 8080,
    "run" : true,
    "sport" : 8181,
    "ssl" : false
    },
    "rtmp" :
    {
    "port" : 1935,
    "run" : true,
    "ssl" : false
    },
    "rtsp" :
    {
    "port" : 8554,
    "run" : true,
    "ssl" : false
    },
    "srt" :
    {
    "port" : 9000,
    "run" : true
    },
    "start_time" : "2022-05-21 22:18:31"
    }

  • 业务标识 config
    # 获取配置信息
    # HTTP GET
    http://127.0.0.1:8080/api/config # 更新配置信息
    # HTTP POST
    http://127.0.0.1:8080/api/config

    获取配置信息和设置配置信息,需要一个复杂的逻辑,需要重启服务器,况且只能 127.0.0.1 地址访问,这里不多说了,大家可以参考我们 github 上的 WEB 管理后台的接口部分调用

  • 业务标识 policy

    这块同上,相对复杂,这里不做详细解释
  • 业务标识 statistics
    # 获取服务器统计信息
    # HTTP GET
    http://192.168.1.1:8080/api/statistics 这个是获取的统计信息,目前意义不大

WEB ( web ) 通用接口说明

这个接口对应的服务器上的 /html 目录,这个是个简单的 http 服务器,可以把播放器页面与脚本,聊天室页面与脚本到此目录,目录与文件名字禁止与上述 URL 中的重复,那样会导致优先访问上述 URL,把 index.html 放到 /html 目录下,直接输入 http://192.168.1.1:8080 就能直接显示了,这里不做过多介绍

例子,访问播放器 :

http://192.168.1.1:8080/webrtc.html

效果如下

​编辑

WEB IM 接口说明

这个对应服务器下 /html 目录下的 webrtc.html 以及脚本文件,有兴趣的朋友可以自行研究一下代码。

这个里面实现点对点聊天,群组聊天,利用浏览器自带的 webrtc 进行音视频聊天。这里就不做过多说明,具体实现就是上图 webrtc.html

WEB 接口认证

参见服务器的配置文件 config.xml

<config>
<authurl timeout="3000" router="/api">www.qiyicc.com<authurl/>
</config>

为了防止非法操作上述 web 接口,需要对每个 web 请求进行鉴权验证。就需要在服务器上配置类似的验证信息。服务器作为 web client,鉴权服务器作为 web server ,访问方式就是一个 HTTP GET 请求

参数 说明
timeout 连接鉴权服务器超时时间,毫秒
router

就是 HTTP GET 请求 URL 前面加的前缀,方便鉴权服务器编程方便,比如上述配置里,router="/api",假设需要对获取服务器配置授权,web client 发往鉴权服务器的 HTTP 报文如下:

GET /api/api/config?type=http&role=api HTTP/1.1

User-Agent: smart_rtmpd

Host: www.qiyicc.com:80

Connection: close

/api/api/config?type=http&role=api

第一个 api 就是上述配置的 router="/api"

第二个 api 就是上述的 web api 接口部分的 api/config

参数 type 表示这个鉴权请求来自于 http 业务

参数 role 表示这个鉴权请求是来自 api 这个业务标识

如果 router 配置为空那么请求就变成

GET /api/config?type=http&role=api HTTP/1.1

User-Agent: smart_rtmpd

Host: www.qiyicc.com:80

Connection: close

smart rtmpd web 接口说明的更多相关文章

  1. 《Python Web 接口开发与测试》---即将出版

    为什么要出这样一本书? 首先,今年我有不少工作是跟接口自动化相关的,工作中的接口自动化颇有成效. 我一直是一个没有测试大格局的人,在各种移动测试技术爆发的这一年,我却默默耕耘着自己的一亩三分地儿(We ...

  2. web接口开发与测试

    最近一直在学习和整理web开发与接口测试的相关资料.接口测试本身毫无任何难度,甚至有很多工具和类库来帮助我们进行接口测试.大多测试人员很难深入了解web接口测试的原因是对web开发不太了解,当你越了解 ...

  3. JMeter基于http请求的web接口性能测试总结

    [本文出自天外归云的博客园] 基于http请求的web接口性能测试总结 压测的目的:对于Web接口压测的目的最终是要在对数据库造成压力的情况下观察压测服务器的cpu是否达到预警值.memory是否发生 ...

  4. python WEB接口自动化测试之requests库详解

    由于web接口自动化测试需要用到python的第三方库--requests库,运用requests库可以模拟发送http请求,再结合unittest测试框架,就能完成web接口自动化测试. 所以笔者今 ...

  5. 《Web接口开发与自动化测试 -- 基于Python语言》 ---前言

    前    言 本书的原型是我整理一份Django学习文档,从事软件测试工作的这六.七年来,一直有整理学习资料的习惯,这种学习理解再输出的方式对我非常受用,博客和文档是我主要的输出形式,这些输出同时也帮 ...

  6. oracle触发器 调用 web接口

    最近要求开发当数据表发生变化的时候调用web接口的需求,上网找了好几篇文章看着都觉得不是很好,也根据别人的思路去实现了下,感觉都不太理想,最后使用URLConnection实现了调用.具体查看一下代码 ...

  7. 关于《Web接口开发与自动化测试--基于Python语言》

    关于封面logo 首先,你会被书封上面logo吸引,这么炫酷?双蛇杖?嗯,这是Requests的新logo. 旧的logo是一只乌龟. 新logo是双蛇杖: 看到新logo我首先想到的是 火爆全网页游 ...

  8. 《Web接口开发与自动化测试 -- 基于Python语言》---现已出版。

    终于可以购买了!! 有需要的同学通过下面链接购买. 购买来链接: https://item.jd.com/11806319423.html 为什么要出这样一本书? 首先,今年我有不少工作是跟接口自动化 ...

  9. web接口的开发

    老样子,抛出一个问题:什么是接口? 不解释了,百度吧. 了解起来先从HTTP开始说起吧. HTTP协议的特点: 1,无连接,就是指每次连接都仅仅只处理一个请求,服务器处理完客户的请求之后,收到客户的应 ...

  10. Android应用安全之WEB接口安全

    Android应用安全不仅包括客户端的安全,也包括web接口的安全.移动App中的Web接口安全主要分为以下几块: 1.SQL注入漏洞 这是一个不能再常见的漏洞类型了,由于App的特性,开发人员认为使 ...

随机推荐

  1. [转]Selenium私房菜系列1 -- Selenium简介

    一.Selenium是什么? Selenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,本系列现在主要包括以下4款: 1.Selenium Core:支持DHTML的测试案 ...

  2. kafka消费者3种分配策略

    0.10.2.1 版本的Kafka 有两种分配策略,由消费者测的参数partition.assignment.strategy来控制. RoundRobinAssignor分配策略 RangeAssi ...

  3. 样式优先级的规则:!important`>行内样式>嵌入样式>外链样式>id选择器>类选择器>标签选择器>复合选择器>通配符>继承样式

    CSS样式的优先级应该分成四大类 第一类`!important`,无论引入方式是什么,选择器是什么,它的优先级都是最高的. 第二类引入方式,行内样式的优先级要高于嵌入和外链,嵌入和外链如果使用的选择器 ...

  4. python脚本通过adb命令安装包

    import os os.system("adb install E:\\huaxin.apk") os.system("adb install E:\\hx_recor ...

  5. lightgbm与贷款违约预测项目

    lightgbm histogram算法 将连续的浮点值离散成k个离散值,构造宽度为k的histogram leaf-wise生长策略 每次在所有叶子中找到分裂增益最大的一个叶子,一般也是数据量最大的 ...

  6. JS通用公共函数

    function formatTime(time) { if (typeof time !== 'number' || time < 0) { return time } var hour = ...

  7. CSS手册

    3. CSS背景 1. 颜色 body {background-color:#b0c4de;} 十六进制 - 如:"#ff0000" RGB - 如:"rgb(255,0 ...

  8. JNI接口的实现

    JNI接口的实现 什么是JNI 说明:JNI 是 Java Native Interface 的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++,但是它并不妨碍你使用 ...

  9. SVN报错:database is locked

    https://blog.csdn.net/k7arm/article/details/81168416 https://www.jianshu.com/p/aa9c67fcc407

  10. 06 HBase安装与伪分布式配置

    1.下载压缩文件 2.解压 3.修改文件夹名 4.修改文件夹权限 5.配置环境变量 6.伪分布式配置文件 7.启动HDFS,启动Hbase 8.进入shell界面 9.停止Hbase,停止HDFS运行