stream-deploy/reademe/WVP/reademe.md

22 KiB
Raw Blame History

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