添加说明

This commit is contained in:
孙小云 2025-12-10 11:24:56 +08:00
parent 97298b76f9
commit 957f96305e
1 changed files with 580 additions and 0 deletions

580
reademe/WVP/reademe.md Normal file
View File

@ -0,0 +1,580 @@
WVP 推流相关接口
1⃣ 推流列表接口
接口GET /api/push/list 路径StreamPushController.java:73-95 完整 URL
GET http://114.67.89.4:9090/api/push/list
参数:
page: 当前页(可选)
count: 每页查询数量(可选)
query: 查询内容(可选)
pushing: 是否正在推流可选true/false
mediaServerId: 流媒体ID可选
返回示例:
{
"list": [
{
"id": 1,
"app": "live",
"stream": "prod",
"gbId": "34020000001320000001",
"name": "测试推流",
"pushing": true,
"mediaServerId": "polaris",
"createTime": "2025-12-09 16:00:00"
}
],
"total": 1,
"pageNum": 1,
"pageSize": 10
}
2⃣ 开始播放接口(获取流地址)
接口GET /api/push/start 路径StreamPushController.java:258-286 完整 URL
GET http://114.67.89.4:9090/api/push/start?id=1
参数:
id: 推流ID必填从推流列表中获取
返回示例:
{
"code": 0,
"msg": "success",
"data": {
"app": "live",
"stream": "prod",
"mediaServerId": "polaris",
"flv": "http://114.67.89.4:8778/live/prod.live.flv",
"https_flv": "https://114.67.89.4:443/live/prod.live.flv",
"ws_flv": "ws://114.67.89.4:8778/live/prod.live.flv",
"wss_flv": "wss://114.67.89.4:443/live/prod.live.flv",
"fmp4": "http://114.67.89.4:8778/live/prod.live.mp4",
"https_fmp4": "https://114.67.89.4:443/live/prod.live.mp4",
"ws_fmp4": "ws://114.67.89.4:8778/live/prod.live.mp4",
"wss_fmp4": "wss://114.67.89.4:443/live/prod.live.mp4",
"hls": "http://114.67.89.4:8778/live/prod/hls.m3u8",
"https_hls": "https://114.67.89.4:443/live/prod/hls.m3u8",
"ts": "http://114.67.89.4:8778/live/prod.live.ts",
"https_ts": "https://114.67.89.4:443/live/prod.live.ts",
"ws_ts": "ws://114.67.89.4:8778/live/prod.live.ts",
"wss_ts": "wss://114.67.89.4:443/live/prod.live.ts",
"rtmp": "rtmp://114.67.89.4:10001/live/prod",
"rtsp": "rtsp://114.67.89.4:10002/live/prod",
"rtc": "http://114.67.89.4:8778/index/api/webrtc?app=live&stream=prod&type=play",
"rtc_https": "https://114.67.89.4:443/index/api/webrtc?app=live&stream=prod&type=play"
}
}
关键字段说明:
rtc: WebRTC 播放地址HTTP
rtc_https: WebRTC 播放地址HTTPS
flv: HTTP-FLV 播放地址
hls: HLS 播放地址
rtmp: RTMP 播放地址
rtsp: RTSP 播放地址
完整使用流程
步骤 1查询推流列表
curl 'http://114.67.89.4:9090/api/push/list?page=1&count=10&pushing=true'
返回:
{
"list": [
{
"id": 123,
"app": "live",
"stream": "prod",
"pushing": true
}
]
}
步骤 2获取播放地址包括 WebRTC
curl 'http://114.67.89.4:9090/api/push/start?id=123'
返回:
{
"code": 0,
"data": {
"rtc": "http://114.67.89.4:8778/index/api/webrtc?app=live&stream=prod&type=play",
"flv": "http://114.67.89.4:8778/live/prod.live.flv",
"hls": "http://114.67.89.4:8778/live/prod/hls.m3u8",
"rtmp": "rtmp://114.67.89.4:10001/live/prod",
"rtsp": "rtsp://114.67.89.4:10002/live/prod"
}
}
步骤 3使用 WebRTC 播放
WebRTC 播放地址:
http://114.67.89.4:8778/index/api/webrtc?app=live&stream=prod&type=play
这个地址可以直接用于 WebRTC 播放器,例如:
在网页中使用 WebRTC 播放器
使用 ZLM 提供的 WebRTC 客户端
测试接口
让我测试一下这些接口:
Bash Test WVP push list API
IN
curl -s 'http://114.67.89.4:9090/api/push/list?page=1&count=10' | python3 -m json.tool | head -50
OUT
{
"code": 401,
"msg": "\u8bf7\u767b\u5f55\u540e\u91cd\u65b0\u8bf7\u6c42"
}
看到了WVP 的接口需要登录认证。让我帮你获取登录 token然后测试接口。
Bash Login to WVP and get token
IN
ssh ZTE "curl -s -X POST 'http://127.0.0.1:18978/api/user/login' -H 'Content-Type: application/json' -d '{\"username\":\"admin\",\"password\":\"admin\"}' | python3 -m json.tool"
OUT
{
"code": 400,
"msg": "\u53c2\u6570\u6216\u65b9\u6cd5\u9519\u8bef",
"data": null
}
让我查找正确的登录接口:
Grep "@PostMapping.*login|@GetMapping.*login" (in /Users/sunpeng/workspace/stream-deploy/docker/wvp/wvpcode/src/main/java/com/genersoft/iot/vmp, glob: **/*Controller.java)
41 lines of output
好的,我看到登录接口需要 MD5 加密的密码。让我测试完整的流程:
Bash Calculate MD5 of admin password and login to WVP
IN
ssh ZTE "
# 计算 admin 的 MD5
PASSWORD_MD5=\$(echo -n 'admin' | md5sum | awk '{print \$1}')
echo \"Password MD5: \$PASSWORD_MD5\"
# 登录获取 token
curl -s 'http://127.0.0.1:18978/api/user/login?username=admin&password='\$PASSWORD_MD5 | python3 -m json.tool
"
OUT
Password MD5: 21232f297a57a5a743894a0e4a801fc3
{
"code": 0,
"msg": "\u6210\u529f",
"data": {
"accessToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjNlNzk2NDZjNGRiYzQwODM4M2E5ZWVkMDlmMmI4NWFlIn0.eyJqdGkiOiJ6Skw2Rzd4X2NNRXZRT0FiWTV3dkl3IiwiaWF0IjoxNzY1MjcyODA2LCJleHAiOjE3NjUyNzY0MDYsIm5iZiI6MTc2NTI3MjgwNiwic3ViIjoibG9naW4iLCJhdWQiOiJBdWRpZW5jZSIsInVzZXJOYW1lIjoiYWRtaW4ifQ.kYBL6VC7hAiYWsX9_MoRXwZmwnpcAt5oi1ZHCtZDTHCoAIUxl_VkNCee7M6L1v2bdmjFxH_PXVygK2jaiLTyPjZloIesHgocFJwikgMAAtxeTZreuEd1Kw7r2nPNHxmZadgjHDqz-gyz2O1E9xOtYTmwMyZYaftOUhZfogAxIbNkt18X2Umdt7mRuIDLsFw0LP0Hcp2273C56F4-hVfF5lxsHtcLPtbq7HppTFMYQwC0KaZBbST6WMjhzbby5Vr3LIcA2BEvOflUigD5goQSM47q-fu87fpx4VFkPzS8pkRWHIGM1Vvjry0jPCW1b6Lk_FhV5Z3IjjUa_Ju4ds6GlA",
"serverId": "000000",
"id": 1,
"enabled": true,
"password": null,
"role": {
"id": 1,
"name": "admin",
"authority": "0",
"createTime": "2021-04-13 14:14:57",
"updateTime": "2021-04-13 14:14:57"
},
"username": "admin",
"pushKey": "3e80d1762a324d5b0ff636e0bd16f1e3",
"authorities": null,
"accountNonExpired": true,
"accountNonLocked": true,
"credentialsNonExpired": true
}
}
完美!登录成功了。现在让我使用这个 token 测试推流列表和播放接口:
Bash Test WVP push list API with token
IN
ssh ZTE "
TOKEN='eyJhbGciOiJSUzI1NiIsImtpZCI6IjNlNzk2NDZjNGRiYzQwODM4M2E5ZWVkMDlmMmI4NWFlIn0.eyJqdGkiOiJ6Skw2Rzd4X2NNRXZRT0FiWTV3dkl3IiwiaWF0IjoxNzY1MjcyODA2LCJleHAiOjE3NjUyNzY0MDYsIm5iZiI6MTc2NTI3MjgwNiwic3ViIjoibG9naW4iLCJhdWQiOiJBdWRpZW5jZSIsInVzZXJOYW1lIjoiYWRtaW4ifQ.kYBL6VC7hAiYWsX9_MoRXwZmwnpcAt5oi1ZHCtZDTHCoAIUxl_VkNCee7M6L1v2bdmjFxH_PXVygK2jaiLTyPjZloIesHgocFJwikgMAAtxeTZreuEd1Kw7r2nPNHxmZadgjHDqz-gyz2O1E9xOtYTmwMyZYaftOUhZfogAxIbNkt18X2Umdt7mRuIDLsFw0LP0Hcp2273C56F4-hVfF5lxsHtcLPtbq7HppTFMYQwC0KaZBbST6WMjhzbby5Vr3LIcA2BEvOflUigD5goQSM47q-fu87fpx4VFkPzS8pkRWHIGM1Vvjry0jPCW1b6Lk_FhV5Z3IjjUa_Ju4ds6GlA'
echo '=== 1. 查询推流列表 ==='
curl -s 'http://127.0.0.1:18978/api/push/list?page=1&count=10' -H 'access-token: '\$TOKEN | python3 -m json.tool
"
OUT
=== 1. 查询推流列表 ===
{
"code": 0,
"msg": "\u6210\u529f",
"data": {
"total": 1,
"list": [
{
"gbId": 0,
"gbDeviceId": null,
"gbName": null,
"gbManufacturer": null,
"gbModel": null,
"gbOwner": null,
"gbCivilCode": null,
"gbBlock": null,
"gbAddress": null,
"gbParental": null,
"gbParentId": null,
"gbSafetyWay": null,
"gbRegisterWay": null,
"gbCertNum": null,
"gbCertifiable": null,
"gbErrCode": null,
"gbEndTime": null,
"gbSecrecy": null,
"gbIpAddress": null,
"gbPort": null,
"gbPassword": null,
"gbStatus": null,
"gbLongitude": null,
"gbLatitude": null,
"gpsAltitude": null,
"gpsSpeed": null,
"gpsDirection": null,
"gpsTime": null,
"gbBusinessGroupId": null,
"gbPtzType": null,
"gbPositionType": null,
"gbRoomType": null,
"gbUseType": null,
"gbSupplyLightType": null,
"gbDirectionType": null,
"gbResolution": null,
"gbDownloadSpeed": null,
"gbSvcSpaceSupportMod": null,
"gbSvcTimeSupportMode": null,
"recordPLan": null,
"dataType": 2,
"dataDeviceId": 4,
"createTime": "2025-12-09 16:06:23",
"updateTime": "2025-12-09 16:06:23",
"streamId": null,
"enableBroadcast": null,
"mapLevel": null,
"id": 4,
"app": "live",
"stream": "prod",
"mediaServerId": "polaris",
"serverId": "000000",
"pushTime": "2025-12-09 16:06:23",
"pushing": true,
"startOfflinePush": false,
"uniqueKey": null
}
],
"pageNum": 1,
"pageSize": 10,
"size": 1,
"startRow": 1,
"endRow": 1,
"pages": 1,
"prePage": 0,
"nextPage": 0,
"isFirstPage": true,
"isLastPage": true,
"hasPreviousPage": false,
"hasNextPage": false,
"navigatePages": 8,
"navigatepageNums": [
1
],
"navigateFirstPage": 1,
"navigateLastPage": 1
}
}
完美!推流列表查询成功了。现在让我测试播放接口,获取包括 WebRTC 在内的所有播放地址:
Bash Test WVP play start API to get stream URLs including WebRTC
IN
ssh ZTE "
TOKEN='eyJhbGciOiJSUzI1NiIsImtpZCI6IjNlNzk2NDZjNGRiYzQwODM4M2E5ZWVkMDlmMmI4NWFlIn0.eyJqdGkiOiJ6Skw2Rzd4X2NNRXZRT0FiWTV3dkl3IiwiaWF0IjoxNzY1MjcyODA2LCJleHAiOjE3NjUyNzY0MDYsIm5iZiI6MTc2NTI3MjgwNiwic3ViIjoibG9naW4iLCJhdWQiOiJBdWRpZW5jZSIsInVzZXJOYW1lIjoiYWRtaW4ifQ.kYBL6VC7hAiYWsX9_MoRXwZmwnpcAt5oi1ZHCtZDTHCoAIUxl_VkNCee7M6L1v2bdmjFxH_PXVygK2jaiLTyPjZloIesHgocFJwikgMAAtxeTZreuEd1Kw7r2nPNHxmZadgjHDqz-gyz2O1E9xOtYTmwMyZYaftOUhZfogAxIbNkt18X2Umdt7mRuIDLsFw0LP0Hcp2273C56F4-hVfF5lxsHtcLPtbq7HppTFMYQwC0KaZBbST6WMjhzbby5Vr3LIcA2BEvOflUigD5goQSM47q-fu87fpx4VFkPzS8pkRWHIGM1Vvjry0jPCW1b6Lk_FhV5Z3IjjUa_Ju4ds6GlA'
echo '=== 2. 获取播放地址(包括 WebRTC ==='
curl -s 'http://127.0.0.1:18978/api/push/start?id=4' -H 'access-token: '\$TOKEN | python3 -m json.tool
"
OUT
=== 2. 获取播放地址(包括 WebRTC ===
{
"code": 0,
"msg": "\u6210\u529f",
"data": {
"app": "live",
"stream": "prod",
"ip": null,
"flv": "http://114.67.89.4:8778/live/prod.live.flv?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"https_flv": "https://114.67.89.4:443/live/prod.live.flv?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"ws_flv": "ws://114.67.89.4:8778/live/prod.live.flv?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"wss_flv": "wss://114.67.89.4:443/live/prod.live.flv?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"fmp4": "http://114.67.89.4:8778/live/prod.live.mp4?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"https_fmp4": "https://114.67.89.4:443/live/prod.live.mp4?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"ws_fmp4": "ws://114.67.89.4:8778/live/prod.live.mp4?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"wss_fmp4": "wss://114.67.89.4:443/live/prod.live.mp4?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"hls": "http://114.67.89.4:8778/live/prod/hls.m3u8?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"https_hls": "https://114.67.89.4:443/live/prod/hls.m3u8?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"ws_hls": "ws://114.67.89.4:8778/live/prod/hls.m3u8?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"wss_hls": "wss://114.67.89.4:443/live/prod/hls.m3u8?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"ts": "http://114.67.89.4:8778/live/prod.live.ts?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"https_ts": "https://114.67.89.4:443/live/prod.live.ts?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"ws_ts": "ws://114.67.89.4:8778/live/prod.live.ts?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"wss_ts": null,
"rtmp": "rtmp://114.67.89.4:10001/live/prod?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"rtmps": null,
"rtsp": "rtsp://114.67.89.4:10002/live/prod?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"rtsps": null,
"rtc": "http://114.67.89.4:8778/index/api/webrtc?app=live&stream=prod&type=play&originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"rtcs": "https://114.67.89.4:443/index/api/webrtc?app=live&stream=prod&type=play&originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"mediaServerId": "polaris",
"mediaInfo": {
"app": "live",
"stream": "prod",
"mediaServer": {
"id": "polaris",
"ip": "polaris-media",
"hookIp": "polaris-wvp",
"sdpIp": "114.67.89.4",
"streamIp": "114.67.89.4",
"httpPort": 8778,
"httpSSlPort": 443,
"rtmpPort": 10001,
"flvPort": 9090,
"flvSSLPort": 443,
"mp4Port": 0,
"wsFlvPort": 9090,
"wsFlvSSLPort": 443,
"rtmpSSlPort": 0,
"rtpProxyPort": 10003,
"jttProxyPort": 0,
"rtspPort": 10002,
"rtspSSLPort": 0,
"autoConfig": true,
"secret": "su6TiedN2rVAmBbIDX0aa0QTiBJLBdcf",
"hookAliveInterval": 10.0,
"rtpEnable": true,
"status": true,
"rtpPortRange": "30000,30500",
"sendRtpPortRange": "50502,50506",
"recordAssistPort": 0,
"createTime": "2025-12-09 11:02:16",
"updateTime": "2025-12-09 11:02:16",
"lastKeepaliveTime": null,
"defaultServer": true,
"recordDay": 7,
"recordPath": "/opt/media/bin/www/record/",
"type": "zlm",
"transcodeSuffix": null,
"serverId": "000000"
},
"schema": "rtsp",
"readerCount": 6,
"videoCodec": "H264",
"width": 1280,
"height": 720,
"fps": 30,
"loss": -1,
"audioCodec": "AAC",
"audioChannels": 1,
"audioSampleRate": 24000,
"duration": 5258065,
"online": null,
"originType": 1,
"originTypeStr": "rtmp_push",
"originUrl": null,
"aliveSecond": 5262,
"bytesSpeed": 319956,
"callId": null,
"paramMap": {
"sign": "41db35390ddad33f83944f44b8b75ded"
},
"serverId": "000000"
},
"startTime": null,
"endTime": null,
"duration": null,
"downLoadFilePath": null,
"transcodeStream": null,
"progress": 0.0,
"key": null,
"serverId": "000000"
}
}
完美!测试成功了。现在让我为你整理完整的 WVP 推流接口文档。
WVP 推流接口完整文档
📋 1. 登录接口
接口GET/POST /api/user/login 参数:
username: 用户名例如admin
password: 密码的 MD5 值例如admin 的 MD5 是 21232f297a57a5a743894a0e4a801fc3
示例:
# 计算密码的 MD5
echo -n "admin" | md5
# 输出: 21232f297a57a5a743894a0e4a801fc3
# 登录
curl 'http://114.67.89.4:9090/api/user/login?username=admin&password=21232f297a57a5a743894a0e4a801fc3'
返回:
{
"code": 0,
"msg": "成功",
"data": {
"accessToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjNlNzk2NDZjNGRiYzQwODM4M2E5ZWVkMDlmMmI4NWFlIn0...",
"username": "admin",
"pushKey": "3e80d1762a324d5b0ff636e0bd16f1e3"
}
}
重要:后续所有接口都需要在请求头中添加 access-token
-H 'access-token: eyJhbGciOiJSUzI1NiIsImtpZCI6IjNlNzk2NDZjNGRiYzQwODM4M2E5ZWVkMDlmMmI4NWFlIn0...'
📋 2. 推流列表接口
接口GET /api/push/list 参数:
page: 当前页(可选)
count: 每页数量(可选)
query: 查询内容(可选)
pushing: 是否正在推流可选true/false
mediaServerId: 流媒体ID可选
示例:
curl 'http://114.67.89.4:9090/api/push/list?page=1&count=10&pushing=true' \
-H 'access-token: YOUR_TOKEN'
返回:
{
"code": 0,
"msg": "成功",
"data": {
"total": 1,
"list": [
{
"id": 4,
"app": "live",
"stream": "prod",
"mediaServerId": "polaris",
"pushing": true,
"pushTime": "2025-12-09 16:06:23",
"createTime": "2025-12-09 16:06:23"
}
],
"pageNum": 1,
"pageSize": 10
}
}
关键字段:
id: 推流ID用于后续获取播放地址
app: 应用名
stream: 流ID
pushing: 是否正在推流
📋 3. 获取播放地址接口(包括 WebRTC
接口GET /api/push/start 参数:
id: 推流ID必填从推流列表中获取
示例:
curl 'http://114.67.89.4:9090/api/push/start?id=4' \
-H 'access-token: YOUR_TOKEN'
返回:
{
"code": 0,
"msg": "成功",
"data": {
"app": "live",
"stream": "prod",
"flv": "http://114.67.89.4:8778/live/prod.live.flv?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"ws_flv": "ws://114.67.89.4:8778/live/prod.live.flv?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"hls": "http://114.67.89.4:8778/live/prod/hls.m3u8?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"rtmp": "rtmp://114.67.89.4:10001/live/prod?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"rtsp": "rtsp://114.67.89.4:10002/live/prod?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"rtc": "http://114.67.89.4:8778/index/api/webrtc?app=live&stream=prod&type=play&originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"rtcs": "https://114.67.89.4:443/index/api/webrtc?app=live&stream=prod&type=play&originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"mediaInfo": {
"videoCodec": "H264",
"width": 1280,
"height": 720,
"fps": 30,
"audioCodec": "AAC",
"audioChannels": 1,
"audioSampleRate": 24000
}
}
}
播放地址字段说明:
字段 协议 说明
rtc WebRTC (HTTP) 低延迟播放,推荐
rtcs WebRTC (HTTPS) 低延迟播放HTTPS
flv HTTP-FLV HTTP 流式播放
ws_flv WebSocket-FLV WebSocket 流式播放
hls HLS M3U8 播放
rtmp RTMP RTMP 播放
rtsp RTSP RTSP 播放
fmp4 HTTP-FMP4 FMP4 流式播放
ts HTTP-TS TS 流式播放
完整使用流程
步骤 1登录获取 Token
# 计算密码 MD5
PASSWORD_MD5=$(echo -n "admin" | md5)
# 登录
curl 'http://114.67.89.4:9090/api/user/login?username=admin&password='$PASSWORD_MD5
返回:
{
"data": {
"accessToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjNlNzk2NDZjNGRiYzQwODM4M2E5ZWVkMDlmMmI4NWFlIn0..."
}
}
保存 accessToken 用于后续请求。
步骤 2查询推流列表
TOKEN="eyJhbGciOiJSUzI1NiIsImtpZCI6IjNlNzk2NDZjNGRiYzQwODM4M2E5ZWVkMDlmMmI4NWFlIn0..."
curl 'http://114.67.89.4:9090/api/push/list?page=1&count=10&pushing=true' \
-H "access-token: $TOKEN"
返回:
{
"data": {
"list": [
{
"id": 4,
"app": "live",
"stream": "prod",
"pushing": true
}
]
}
}
记录 id 字段例如4
步骤 3获取播放地址包括 WebRTC
curl 'http://114.67.89.4:9090/api/push/start?id=4' \
-H "access-token: $TOKEN"
返回:
{
"data": {
"rtc": "http://114.67.89.4:8778/index/api/webrtc?app=live&stream=prod&type=play&originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"flv": "http://114.67.89.4:8778/live/prod.live.flv?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"hls": "http://114.67.89.4:8778/live/prod/hls.m3u8?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264",
"rtmp": "rtmp://114.67.89.4:10001/live/prod?originTypeStr=rtmp_push&audioCodec=AAC&videoCodec=H264"
}
}
步骤 4使用播放地址
WebRTC 播放(推荐,低延迟)
http://114.67.89.4:8778/index/api/webrtc?app=live&stream=prod&type=play
HTTP-FLV 播放
http://114.67.89.4:8778/live/prod.live.flv
HLS 播放
http://114.67.89.4:8778/live/prod/hls.m3u8
Python 示例代码
import requests
import hashlib
# 配置
BASE_URL = "http://114.67.89.4:9090"
USERNAME = "admin"
PASSWORD = "admin"
# 1. 登录
password_md5 = hashlib.md5(PASSWORD.encode()).hexdigest()
response = requests.get(f"{BASE_URL}/api/user/login", params={
"username": USERNAME,
"password": password_md5
})
token = response.json()["data"]["accessToken"]
print(f"Token: {token}")
# 2. 查询推流列表
headers = {"access-token": token}
response = requests.get(f"{BASE_URL}/api/push/list", headers=headers, params={
"page": 1,
"count": 10,
"pushing": True
})
push_list = response.json()["data"]["list"]
print(f"推流列表: {push_list}")
# 3. 获取播放地址
if push_list:
push_id = push_list[0]["id"]
response = requests.get(f"{BASE_URL}/api/push/start", headers=headers, params={
"id": push_id
})
play_urls = response.json()["data"]
print(f"\n播放地址")
print(f"WebRTC: {play_urls['rtc']}")
print(f"HTTP-FLV: {play_urls['flv']}")
print(f"HLS: {play_urls['hls']}")
print(f"RTMP: {play_urls['rtmp']}")
print(f"RTSP: {play_urls['rtsp']}")
总结
WVP 推流接口特点
✅ 统一的接口:通过推流 ID 获取所有播放地址
✅ 包含 WebRTC支持低延迟播放
✅ 多种协议FLV、HLS、RTMP、RTSP、WebRTC 等
✅ 媒体信息:返回视频编码、分辨率、帧率等详细信息
✅ 需要认证:所有接口都需要 access-token
关键接口
接口 说明
/api/user/login 登录获取 token
/api/push/list 查询推流列表
/api/push/start 获取播放地址(包括 WebRTC
这就是完整的 WVP 推流接口文档!