22 KiB
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 推流接口文档!