当前位置:网站首页>smart rtmpd web 接口说明
smart rtmpd web 接口说明
2022-08-02 14:16:00 【freeabc】
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 /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 |
边栏推荐
猜你喜欢
随机推荐
mininet hosts talk to real internet
PostgreSQL 协议数据样例
为什么Volatile能保证双重检查锁的线程安全
【软件测试】概念篇
Oauth2.0 resource server construction
三方对接接口数据安全问题
炒鸡好用的音乐平台(插件)
change the available bandwidth of tcp flow dynamically in mininet
OpenPose run command ([email protected])
【进程间通信】信号量的使用/共享内存
Evaluate multipath BBR congestion control on ns3
创建系统还原点及恢复
使用三个线程,按顺序打印X,Y,Z,连续打印10次
Windows下mysql服务无法启动:服务没有报告任何错误。
使用1D-1D EPE的光波导布局设计工具
打包项目上传到PyPI
queue的c实现
Template series-union set
JCMsuite应用:四分之一波片
【线程安全】用户级,内核级,组合级线程|线程同步的处理(条件变量)|strtok_r(可冲入函数)