通过API上传视频到Vimeo时出现超时错误

0 投票
1 回答
1829 浏览
提问于 2025-04-18 07:18

我有一个Python脚本,它利用了最新的Vimeo API(https://developer.vimeo.com/api/)来上传一些视频到我的Vimeo账户。

这个脚本大致上是这样工作的:

from vimeo import VimeoClient
vimeo = VimeoClient('my_token_here')
uid = vimeo.upload('/path/to/file.mov')

file.mov文件大小在3MB或更小的时候,一切都很顺利,文件可以成功上传。但是如果文件更大,我就会遇到超时错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/fabio/.virtualenvs/venv/src/vimeo/vimeo/uploads.py", line 79, in __call__
    return do_upload()
  File "/home/fabio/.virtualenvs/venv/src/vimeo/vimeo/uploads.py", line 70, in do_upload
    self.upload_segment(upload_uri, _range, video_data, filetype or 'mp4')
  File "/home/fabio/.virtualenvs/venv/src/vimeo/vimeo/uploads.py", line 135, in upload_segment
    body=data, headers=request_headers)
  File "/home/fabio/.virtualenvs/venv/lib/python2.7/site-packages/tornado/httpclient.py", line 85, in fetch
    self._async_client.fetch, request, **kwargs))
  File "/home/fabio/.virtualenvs/venv/lib/python2.7/site-packages/tornado/ioloop.py", line 389, in run_sync
    return future_cell[0].result()
  File "/home/fabio/.virtualenvs/venv/lib/python2.7/site-packages/tornado/concurrent.py", line 131, in result
    return super(TracebackFuture, self).result(timeout=timeout)
  File "/home/fabio/.virtualenvs/venv/lib/python2.7/site-packages/tornado/concurrent.py", line 65, in result
    raise self._exception
HTTPError: HTTP 599: Timeout

我使用的Vimeo库是这个:https://github.com/vimeo/vimeo.py

而我虚拟环境中的Tornado库已经更新到3.2.1版本。

你有什么建议吗?

1 个回答

0

根据Tornado的源代码HTTPClient的默认请求超时时间是20秒,而这个是vimeo正在使用的。看起来Vimeo库会尽量上传尽可能多的视频,然后再询问服务器已经成功上传了多少内容。很可能你上传视频的时间超过了20秒,因此导致了超时。不过,我不太确定他们是否处理得当,因为你会收到来自Tornado的超时错误,但他们似乎想支持一次不上传整个文件。

你可以尝试修改我上面提到的vimeo库的代码,把超时时间调得更长一些,可以把你本地的那行代码改成类似下面的:

    r = HTTPClient().fetch(upload_uri, method="PUT",
                           body=data, headers=request_headers, 
                           request_timeout=9999.0)

如果这样还是不行,你可以试着在他们的github问题追踪器上提个问题,可能会有实际参与这个项目的人能进一步帮助你。

撰写回答