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

Python调用YouTube API上传长视频触发ssl.SSLWantWriteError报错

问题根因

这个ssl.SSLWantWriteError是大文件上传场景的典型问题:1分钟短视频体积小、传输耗时短,默认配置下可以顺利跑完;1小时长视频体积大、传输周期长,默认HTTP客户端的超时阈值、传输模式不匹配长连接上传需求,SSL层写入缓冲区无法及时排空、连接被中途截断就会抛出这个错误。另外你现有代码里还有一处字段拼写错误,会导致视频分类参数不生效,需要一并修复。

修复步骤
  • 修正snippet字段拼写错误
    你当前request_body的snippet块中写的是categoryI(结尾为大写字母i),正确字段名是categoryId,该错误不会触发SSL报错,但会导致上传后视频分类配置失效,先修正该笔误。
  • 开启可恢复分块上传,设置合理分块大小
    不要使用默认的大块直传逻辑,显式指定分块大小为官方推荐的10MB,开启断点续传能力,替换原有的MediaFileUpload初始化代码:
# 替换原代码中 mediaFile = MediaFileUpload('output.mp4') 行
mediaFile = MediaFileUpload(
    'output.mp4',
    chunksize=10*1024*1024,  # 单块大小10MB,降低单次传输压力
    resumable=True  # 开启可恢复上传,避免网络波动导致全量重传
)
  • 调整HTTP客户端超时配置
    默认的httplib2客户端超时仅60秒,长视频上传过程中块传输等待很容易触发超时断连,先补全依赖导入:
import time
import ssl
import httplib2
from googleapiclient import errors

在创建service实例的代码后,替换默认HTTP实例,拉长超时阈值:

# 放在 service = Create_Service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES) 行之后
http = httplib2.Http(
    timeout=600,  # 超时设置为10分钟,适配大文件块传输等待周期
    disable_ssl_certificate_validation=False
)
# 绑定认证凭证,替换service默认使用的http实例
http = service.http.credentials.authorize(http)
service.http = http
  • 替换上传执行逻辑,增加临时错误重试
    不要直接调用.execute()做一次性上传,改成逐块上传、捕获临时SSL错误自动重试的逻辑,替换原有的视频上传代码块:
# 替换原代码中 response_upload = service.videos().insert(...).execute() 部分
request = service.videos().insert(
    part='snippet,status',
    body=request_body,
    media_body=mediaFile
)
response_upload = None
while response_upload is None:
    try:
        status, response_upload = request.next_chunk()
        if status:
            print(f"上传进度: {int(status.progress() * 100)}%")
    except ssl.SSLWantWriteError as e:
        print(f"临时SSL写入错误,2秒后重试当前块: {e}")
        time.sleep(2)
        continue
    except errors.HttpError as e:
        print(f"上传接口返回错误: {e}")
        raise
  • 保留原有缩略图上传逻辑即可,注意要等视频上传完成拿到有效videoId后再执行,避免抢占长视频上传的连接资源。
额外排查项

如果完成以上配置后仍然报错,按以下顺序排查:

  • 检查本地网络是否存在长连接限制,比如家用路由器、公司防火墙会自动切断超过固定时长的TCP连接,可以切换到其他网络(如手机热点)测试
  • 确认Python版本,你当前使用的Python3.8.0存在已知的SSL层缓冲区处理bug,可以升级到3.8.10及以上的3.8稳定分支,或升级到3.10稳定版
  • 确认待上传的output.mp4没有被其他进程占用(比如未关闭的视频剪辑软件),大文件读取IO阻塞也会触发SSL写入超时

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:27:51