You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:如何为Nest电池摄像头生成有效OfferSdp?

生成Nest Camera Live Stream的有效OfferSdp(附curl命令和Python脚本)

我明白你想要一个更直观的方式来生成符合Nest要求的OfferSdp,尤其是类似其他Nest API请求的curl命令,还有封装好的Python脚本对吧?官方文档里这块确实没讲透,下面给你直接上可用的方案:

先明确OfferSdp的核心要求

Nest的GenerateWebRtcStream接口需要的OfferSdp是符合WebRTC标准的SDP字符串,必须包含视频(优先H.264编码)和音频(OPUS编码)的媒体描述,同时要适配Nest设备的能力。这里给你一个简化但有效的模板,你可以直接用或者按需调整:

v=0
o=- 12345 12345 IN IP4 0.0.0.0
s=-
t=0 0
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98
c=IN IP4 0.0.0.0
a=rtcp-mux
a=ice-ufrag:abc123
a=ice-pwd:def456
a=fingerprint:sha-256 AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99
a=setup:actpass
a=mid:video
a=sendrecv
a=rtpmap:96 H264/90000
a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:97 VP8/90000
a=rtpmap:98 VP9/90000
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126
c=IN IP4 0.0.0.0
a=rtcp-mux
a=ice-ufrag:abc123
a=ice-pwd:def456
a=fingerprint:sha-256 AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99
a=setup:actpass
a=mid:audio
a=sendrecv
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1

1. 直接用curl命令调用接口

把上面的SDP模板作为offerSdp的值,替换掉下面的占位符(${ENTERPRISE_ID}、${DEVICE_ID}、${OAUTH_TOKEN}),直接运行即可:

curl -X POST "https://smartdevicemanagement.googleapis.com/v1/enterprises/${ENTERPRISE_ID}/devices/${DEVICE_ID}:generateWebRtcStream" \
  -H "Authorization: Bearer ${OAUTH_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "offerSdp": "v=0\n\no=- 12345 12345 IN IP4 0.0.0.0\n\ns=-\n\nt=0 0\n\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98\n\nc=IN IP4 0.0.0.0\n\na=rtcp-mux\n\na=ice-ufrag:abc123\n\na=ice-pwd:def456\n\na=fingerprint:sha-256 AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99\n\na=setup:actpass\n\na=mid:video\n\na=sendrecv\n\na=rtpmap:96 H264/90000\n\na=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\n\na=rtpmap:97 VP8/90000\n\na=rtpmap:98 VP9/90000\n\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126\n\nc=IN IP4 0.0.0.0\n\na=rtcp-mux\n\na=ice-ufrag:abc123\n\na=ice-pwd:def456\n\na=fingerprint:sha-256 AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99\n\na=setup:actpass\n\na=mid:audio\n\na=sendrecv\n\na=rtpmap:111 opus/48000/2\n\na=fmtp:111 minptime=10;useinbandfec=1"
  }'

⚠️ 注意:SDP里的换行符要转义为\n,否则JSON格式会报错。

2. 封装成Python脚本(自动生成有效SDP)

如果想更灵活,用Python脚本可以自动生成符合WebRTC标准的OfferSdp(依赖aiortc库生成真实的SDP,比手动写模板更可靠):

首先安装依赖:

pip install requests aiortc

然后是脚本:

import requests
import asyncio
from aiortc import RTCPeerConnection, MediaStreamTrack

async def generate_valid_offersdp():
    # 创建WebRTC PeerConnection实例,自动生成符合标准的SDP
    pc = RTCPeerConnection()
    
    # 添加虚拟的视频、音频轨道(不需要真实媒体,只为生成SDP结构)
    class DummyVideoTrack(MediaStreamTrack):
        kind = "video"
    pc.addTrack(DummyVideoTrack())
    
    class DummyAudioTrack(MediaStreamTrack):
        kind = "audio"
    pc.addTrack(DummyAudioTrack())
    
    # 创建Offer并获取SDP
    offer = await pc.createOffer()
    await pc.setLocalDescription(offer)
    offersdp = pc.localDescription.sdp
    await pc.close()
    return offersdp

def call_nest_stream_api(enterprise_id, device_id, oauth_token, offersdp):
    api_url = f"https://smartdevicemanagement.googleapis.com/v1/enterprises/{enterprise_id}/devices/{device_id}:generateWebRtcStream"
    headers = {
        "Authorization": f"Bearer {oauth_token}",
        "Content-Type": "application/json"
    }
    payload = {"offerSdp": offersdp}
    
    response = requests.post(api_url, json=payload)
    response.raise_for_status()  # 捕获API请求错误
    return response.json()

if __name__ == "__main__":
    # 替换成你的实际参数
    ENTERPRISE_ID = "your-enterprise-id"
    DEVICE_ID = "your-nest-device-id"
    OAUTH_TOKEN = "your-oauth-access-token"
    
    # 生成OfferSdp并调用API获取AnswerSDP
    offersdp = asyncio.run(generate_valid_offersdp())
    result = call_nest_stream_api(ENTERPRISE_ID, DEVICE_ID, OAUTH_TOKEN, offersdp)
    print("获取到的AnswerSDP:\n", result["answerSdp"])

关键注意事项

  • 如果你不想用aiortc,可以直接用前面的SDP模板,但建议每次请求更换ice-ufrag、ice-pwd和fingerprint的值(随机生成即可)。
  • 确保你的OAuth Token拥有https://www.googleapis.com/auth/sdm.service权限。
  • 如果遇到SDP无效的错误,优先检查视频编码是否为H.264,音频是否为OPUS——这是Nest设备优先支持的格式。

内容的提问来源于stack exchange,提问作者user1446797

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 20:47:32