> ## Documentation Index
> Fetch the complete documentation index at: https://docs.keyapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 获取已签名的视频流URL

> 获取指定 itag 的已签名播放地址（可直接播放）
配合 get_video_streams 接口使用，先获取所有格式，再选择 itag 获取播放地址

**注意事项**
- 播放地址有时效性（约6小时），过期后需重新获取
- URL 长度较长（约1000-2000字符）
- 某些视频可能受地区限制

<div className="inline-flex items-center gap-2 px-4 py-2 bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg">
  <span className="text-base">🪙</span>
  <span className="text-sm font-medium text-yellow-900 dark:text-yellow-100"><span className="font-semibold">2 credit</span><span className="text-yellow-700 dark:text-yellow-300 ml-1">每次请求</span></span>
</div>

## Copy for AI

<div className="my-6 rounded-xl border border-gray-200 bg-gray-50 p-5 dark:border-gray-800 dark:bg-gray-900/40">
  <div className="min-w-0">
    <p className="text-base font-semibold text-gray-900 dark:text-gray-100">🤖 让 AI 帮你写调用代码</p>
    <p className="mt-1 text-sm text-gray-700 dark:text-gray-300">点击按钮复制一段结构化提示词，可直接交给 ChatGPT、Claude 或其他 AI 助手生成接口调用代码。</p>
  </div>

  <div className="mt-4">
    <button
      type="button"
      className="inline-flex items-center gap-2 rounded-md border border-emerald-300 bg-emerald-50 px-3 py-2 text-sm font-medium text-emerald-800 hover:bg-emerald-100 dark:border-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-100 dark:hover:bg-emerald-900/50"
      onClick={() => navigator.clipboard.writeText(`我想调用 KeyAPI 接口：GET https://api.keyapi.ai/v1/youtube/get_signed_stream_url

请帮我编写调用代码，并包含必要的错误处理、参数校验和响应处理逻辑。

接口信息：

Endpoint: GET https://api.keyapi.ai/v1/youtube/get_signed_stream_url

Description: 获取已签名的视频流URL

Required Headers:
--header 'Authorization: Bearer <YOUR_API_KEY>'

Parameters:
- video_id (Optional): 视频ID（推荐， 与video_url二选一）. Example: dQw4w9WgXcQ
- video_url (Optional): 完整的视频URL（与video_id二选一）. Example: https://www.youtube.com/watch?v=dQw4w9WgXcQ
- itag (Required): 格式标识符，从 get_video_streams 接口返回的格式列表中选择. Example: 18

Example Response:
{
"code": 0,
"message": "success",
"data": {
"itag": 18,
"url": "https://rr2---sn-n4v7snse.googlevideo.com/videoplayback?...",
"expires_in_seconds": 21600
},
"requestId": "09ae9c28-bc8d-43e9-8dcc-5e28de5216c3"
}

请根据以上信息给出可直接运行的示例代码。`)}
    >
      ✨ 复制给 AI
    </button>
  </div>
</div>


## OpenAPI

````yaml zh/youtube.zh.openapi.json GET /v1/youtube/get_signed_stream_url
openapi: 3.0.1
info:
  title: YouTube API 中文文档
  description: YouTube API 的中文参考文档，包含接口用途、参数说明、响应状态和示例结构。
  version: 1.0.0
servers:
  - url: https://api.keyapi.ai
    description: Production
security: []
tags: []
paths:
  /v1/youtube/get_signed_stream_url:
    get:
      tags: []
      summary: 获取已签名的视频流URL
      description: |-
        获取指定 itag 的已签名播放地址（可直接播放）
        配合 get_video_streams 接口使用，先获取所有格式，再选择 itag 获取播放地址

        **注意事项**
        - 播放地址有时效性（约6小时），过期后需重新获取
        - URL 长度较长（约1000-2000字符）
        - 某些视频可能受地区限制
      parameters:
        - name: video_id
          in: query
          description: 视频ID（推荐， 与video_url二选一）
          required: false
          example: dQw4w9WgXcQ
          schema:
            type: string
            example: dQw4w9WgXcQ
        - name: video_url
          in: query
          description: 完整的视频URL（与video_id二选一）
          required: false
          example: https://www.youtube.com/watch?v=dQw4w9WgXcQ
          schema:
            type: string
            example: https://www.youtube.com/watch?v=dQw4w9WgXcQ
        - name: itag
          in: query
          description: 格式标识符，从 get_video_streams 接口返回的格式列表中选择
          required: true
          example: '18'
          schema:
            type: string
            example: '18'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties: {}
              example:
                code: 0
                message: success
                data:
                  itag: 18
                  url: >-
                    https://rr2---sn-n4v7snse.googlevideo.com/videoplayback?expire=1784569652&ei=1ApeateDDZiTsfIPmcy5iQ8&ip=147.182.249.55&id=o-ALxzSWNnBoHoPO68QTV3MpwtEGLCgjnuA28YW1y_rsgV&itag=18&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&cps=1204&met=1784548052%2C&mh=7c&mm=31%2C29&mn=sn-n4v7snse%2Csn-o097znzr&ms=au%2Crdu&mv=m&mvi=2&pl=23&rms=au%2Cau&initcwndbps=200000&bui=AZFlqhNBswx5MROTQhua2VtmmPNUQT8nEwd6wuQPl6lFnOp90knalCSN5i7H6XjPLGW2zw3TMjL3-y4q&spc=SQ-umtZFLGstiGl1s3DPUQ&vprv=1&svpuc=1&mime=video%2Fmp4&rqh=1&cnr=14&ratebypass=yes&dur=213.089&lmt=1766960953317159&mt=1784547653&fvip=5&fexp=51565115&c=ANDROID_VR&txp=5538534&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=AE0s2JYwRgIhAO9KbtWBhE3ZzhhXdG4o1o_7FadRm5etMUwgF-9kzXgBAiEAkaTgkUTizFOh-jyi7H8QPubkVVsDVcqwPVIWskzWtNU%3D&lsparams=cps%2Cmet%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Crms%2Cinitcwndbps&lsig=APaTxxMwRQIhAKeLD6BWmbZ7IkmKVLbatW1bBco_angavNiDXjshfYkyAiA3-wCcFTmmn1L-TK3iG2G2ykiOKZQ9RIoKWl-ELxTfDA%3D%3D
                  expires_in_seconds: 21600
                requestId: 09ae9c28-bc8d-43e9-8dcc-5e28de5216c3
          headers: {}
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '402':
          $ref: '#/components/responses/402'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
      deprecated: false
      security:
        - JWT Bearer: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl --request GET \
              --url 'https://api.keyapi.ai/v1/youtube/get_signed_stream_url?video_id=dQw4w9WgXcQ&video_url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DdQw4w9WgXcQ' \
              --header 'Authorization: Bearer <YOUR_API_KEY>'
        - lang: python
          label: Python
          source: |-
            import requests

            response = requests.get(
                'https://api.keyapi.ai/v1/youtube/get_signed_stream_url',
                params={"video_id": "dQw4w9WgXcQ", "video_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"},
                headers={'Authorization': 'Bearer <YOUR_API_KEY>'}
            )
            print(response.json())
        - lang: javascript
          label: JavaScript
          source: >-
            const params = new URLSearchParams({"video_id": "dQw4w9WgXcQ",
            "video_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"});


            const response = await
            fetch(`https://api.keyapi.ai/v1/youtube/get_signed_stream_url?${params}`,
            {
              method: 'GET',
              headers: { 'Authorization': 'Bearer <YOUR_API_KEY>' }
            });

            const data = await response.json();

            console.log(data);
components:
  responses:
    '400':
      description: Bad Request
      content:
        application/json:
          schema:
            type: object
            example:
              code: 400
              data: null
              message: 'Missing required parameter: handle'
    '401':
      description: Unauthorized
      content:
        application/json:
          schema:
            type: object
            example:
              code: 401
              data: null
              message: apiKey is null
    '402':
      description: Payment Required
      content:
        application/json:
          schema:
            type: object
            example:
              code: 402
              data: null
              message: apiKey quota is not enough
    '429':
      description: Too Many Requests
      content:
        application/json:
          schema:
            type: object
            example:
              code: 429
              data: null
              message: qps limit exceeded
    '500':
      description: Internal Server Error
      content:
        application/json:
          schema:
            type: object
            example:
              code: 500
              data: null
              message: Internal server error
  securitySchemes:
    JWT Bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: |-
        接口鉴权凭证。请在请求 Header 中传入 `Authorization: Bearer <YOUR_API_KEY>`。
        可在 [Dashboard](https://keyapi.ai/app/dashboard) 获取你的 API Key。

````