☰
抖音视频到底怎么播放?aweme_id 与 video_id 一文讲清
2026/10/16 1:57:27 网站建设 项目流程

抖音视频到底怎么播放?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_id19 位纯数字标识"这条作品",查标题、作者、评论都拿它当入参7265649807396474112
video_idv开头、跟一串字母数字标识"这个视频文件",拼播放地址的核心参数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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询