抖音视频到底怎么播放?aweme_id 与 video_id 一文讲清
【免费下载链接】douyinVue3 + Pinia 仿抖音,Vue 在移动端的最佳实践 . Imitate TikTok ,Vue Best practices on Mobile项目地址: https://gitcode.com/GitHub_Trending/do/douyin
把数据文件里的 19 位数字抄下来直接塞进播放地址,video 标签一喂就报错。回头才发现,真正管用的钥匙是数据里更深一层、以v开头的一长串字母。这是第一次接触抖音视频数据时最常卡住的点:两种编号各管一段活。douyin-vue 是 Vue3 + Pinia 搭建的仿抖音移动端项目,本文顺着数据把两种编号讲到最终播放。
aweme_id 与 video_id:长什么样、各管什么
最简单的区分方式是看长相:
| 编号 | 长相 | 管什么 | 仓库真实样例 |
|---|---|---|---|
| aweme_id | 19 位纯数字 | 标识"这条作品",查标题、作者、评论都拿它当入参 | 7265649807396474112 |
| video_id | v开头、跟一串字母数字 | 标识"这个视频文件",拼播放地址的核心参数 | v0300fg10000cna0c8bc77ufge7emlsg |
换句话说,aweme_id 回答"这是谁的哪条作品",video_id 回答"文件放在 CDN 的哪个位置"。同一条视频,前者一辈子不变,后者跟着具体那份文件走。
打开 videos.json,每条记录都同时带着这两样。第一条的aweme_id是7265649807396474112,描述是"放弃自己喜欢的人会遗憾吗?",play_addr.uri里就是那条以v开头的编号,封面指向下图这张图。
这里容易混淆:看到像 ID 的数字就想往 URL 里填。两个编号取数路径完全不同,任何场合都不能互相顶替。
播放地址是怎么拼出来的:video_id 藏在数据哪一层
video_id 并不是摆在顶层的独立字段,而是藏在video.play_addr里,这一层有两处值得注意:
uri字段:直接就是 video_id 本身,如v0300fg10000cna0c8bc77ufge7emlsg。url_list字段:一组已经拼好的完整播放地址,首条记录里的真实地址是https://www.douyin.com/aweme/v1/play/?video_id=v0300fg10000cna0c8bc77ufge7emlsg&line=0&file_id=352b1ee78562413895f30bd7eac026e2&sign=8b86374c142a19da1281a3f741f49982&is_play_url=1&source=PackSourceEnum_PUBLISH。
把 URL 拆开看:video_id参数之外还带着file_id(文件指纹)和sign(服务端签发的临时签名)。video_id 单独并不等于可用地址,必须配合 sign 才能取回文件。所以项目里存的是拼好的完整 URL 列表,而不是一个裸编号留给你现场拼。
这里容易踩坑:以为拿到 video_id 就能自己拼地址。sign 是服务端算出来的,客户端拼不出来,缺了它地址就是废的。
两种编号在数据链路里各走哪条路
查数据全走 aweme_id。评论模块是典型例子:process.js 维护了一份 aweme_id 白名单,把抓取回来的评论大 JSON 按aweme_id逐条过滤,拆成video_id_7260749400622894336.json这样以作品编号命名的小文件,放进 public/data/comments/。注意命名陷阱:文件名前缀写着video_id_,里面装的 key 其实是 aweme_id——命名和字段混用,正是新手最容易被绕晕的地方。
播放走 video_id 对应的现成地址。前端接口定义集中在 videos.ts,推荐流、我的视频、评论列表全部只是"发请求、收数据";真正的假后端在 index.ts 里,用 axios-mock-adapter 拦截请求后从本地 JSON 切片返回。mock 还维护着同一份 aweme_id 白名单:前端传的id不在清单里时,会随机挑一个兜底,再去读对应的评论文件。整条播放链路没有任何实时计算,浏览器拿到的就是带签名的现成地址列表,直接喂给 video 标签,抖音视频播放就此完成。
想自己抓一份视频数据,从哪个入口下手
- 浏览器抓包:在抖音 PC 网页版打开任意视频,开发者工具的 Network 面板过滤
play关键字,视频开始加载时会出现play/?video_id=...这样的请求,URL 里的video_id参数就是要找的值。 - 接口响应里直接读:作品列表接口的返回中,
video.play_addr.uri就是 video_id,url_list是拼好的播放地址。仓库里的 process-post.js 演示的就是这类整理:把原始响应按字段白名单裁剪,只保留aweme_id、desc、video、statistics等字段,再合并进本地用户视频列表供 mock 层消费。已有原始数据的话直接照这个脚本改文件名即可,不必重写逻辑。
⚠️ 容易混淆的点:动手前先对一遍清单
- 两个编号不能互相推导:知道 aweme_id 换不出 video_id,反过来也一样,别指望做个映射表一劳永逸。
- 别拿 aweme_id 去拼播放 URL:
play/?video_id=这个参数只认 video_id,传错类型一定 403。 - 签名参数会过期:本地快照里的 sign 是有保质期的,放久了播放地址会失效;演示项目无所谓,长期服务就要定期刷新数据。
- 接口结构会变动:抖音返回字段不定期调整,白名单式裁剪脚本就是为了隔离这种变化,把适配逻辑集中在数据处理层,前端保持不动。
aweme_id 找到作品,video_id 找到文件,sign 证明你此刻有资格播放。本地跑通只需要:
git clone https://gitcode.com/GitHub_Trending/do/douyin装完依赖启动开发服务器,记得把浏览器切到手机模式再预览。
【免费下载链接】douyinVue3 + Pinia 仿抖音,Vue 在移动端的最佳实践 . Imitate TikTok ,Vue Best practices on Mobile项目地址: https://gitcode.com/GitHub_Trending/do/douyin
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考