通过Python上传视频至Dropbox后iPhone无法播放问题求助
问题根因
- 下载时缺失文件扩展名:调用
stream.download()传入的filename仅拼接了视频标题和作者,未追加.mp4后缀,pytube不会自动补全扩展名,本地存储的文件无合法视频后缀。PC端播放器可直接读取文件二进制头识别编码,因此不受影响可正常播放。 - 上传时未声明MIME类型:调用Dropbox
files_upload接口时未显式指定文件类型,iOS端Dropbox客户端不会做深度文件头解析,仅依靠文件后缀、上传携带的MIME元数据判断文件类型,识别为通用二进制对象后就不会调用内置视频播放器打开。
修复后的代码
import pathlib import re from pytube import YouTube import dropbox # 过滤文件名/路径中的非法字符,避免存储、上传报错 def sanitize_filename(filename): return re.sub(r'[\\/*?:"<>|]', "_", filename) yt = YouTube("https://www.youtube.com/watch?v=r8LrSIIqNYg") stream = yt.streams.get_by_itag(18) # 处理文件名,补上mp4后缀 title = sanitize_filename(f"{yt.title} - {yt.author}.mp4") save_path = pathlib.Path(r"C:\Users\Lenovo\OneDrive\Desktop\Zug-Videos") stream.download(output_path=save_path, filename=title) dbx = dropbox.Dropbox("MY-Access-Token") try: local_file_path = save_path / title with local_file_path.open("rb") as f: # 显式指定MP4视频的MIME类型,上传路径同步带后缀 meta = dbx.files_upload( f.read(), f"/{title}", mode=dropbox.files.WriteMode("overwrite"), content_type="video/mp4" ) except Exception as e: print('Error uploading file to Dropbox: ' + str(e))
补充说明
- itag=18对应的是H.264+AAC编码的360P MP4流,因此固定使用
.mp4后缀和video/mp4MIME类型即可,如果后续下载其他itag的流,需要对应匹配后缀和MIME:比如webm编码流对应后缀为.webm,MIME类型填写video/webm。 - 已经上传到Dropbox的存量文件,直接在网页端给文件重命名加上
.mp4后缀,iOS端即可正常识别播放,无需重新上传。
内容的提问来源于stack exchange,提问作者NerdyNoob
相关产品推荐
相关产品推荐

