Skip to content

搭建成功后,关于播放本地视频遇见的基础问题,我正在通过GPT查阅学习,这个问题我也会尝试更新,请您指正,谢谢 #149

@zxylly1125

Description

@zxylly1125

感谢您的付出,我尝试通过docker在nas中搭建它,并且已经成功运行在我的浏览器中,可是我只想添加我的本地视频来播放,所以执行了一个创建计划的脚本来生成json

#!/bin/bash

# 源视频目录
VIDEO_DIR="/volume1/video/@zyronon-douyin"

# 输出 JSON 路径
JSON_FILE="/volume1/docker/zyronon/douyin01/videos.json"

# 临时文件
TMP_FILE=$(mktemp)

# 写入 JSON 开头
echo "[" > "$TMP_FILE"

first=true

# 查找多种视频格式并随机排序
find "$VIDEO_DIR" -type f \( \
    -iname '*.mp4' -o \
    -iname '*.mov' -o \
    -iname '*.avi' -o \
    -iname '*.mkv' -o \
    -iname '*.flv' -o \
    -iname '*.wmv' -o \
    -iname '*.webm' -o \
    -iname '*.mpeg' \
  \) -print0 \
  | shuf -z \
  | while IFS= read -r -d '' filepath; do
      filename=$(basename "$filepath")
      # 转义双引号
      esc=$(printf '%s' "$filename" | sed 's/"/\\"/g')

      # 如果不是第一条,先写逗号
      if $first; then
        first=false
      else
        echo "," >> "$TMP_FILE"
      fi

      # 写入一条 JSON 记录
      echo "  {\"id\":\"$esc\",\"cover\":\"/videos/$esc\",\"playUrl\":\"/videos/$esc\"}" >> "$TMP_FILE"
    done

# 写入 JSON 结尾
echo "]" >> "$TMP_FILE"

# 替换旧文件并设为只读
mv "$TMP_FILE" "$JSON_FILE"
chmod 444 "$JSON_FILE"

# 可选:打印生成条目数
echo "Generated $(grep -c '"id":' "$JSON_FILE") entries in $JSON_FILE."printf '\n]\n' >> "$OUT"

得到了类似的结果

[
  {"id":"vsfksjh.mp4","cover":"/videos/vsfksjh.mp4","playUrl":"/videos/vsfksjh.mp4"}
,
  {"id":"1.mp4","cover":"/videos/1.mp4","playUrl":"/videos/1.mp4"}
,
  {"id":"4.mp4","cover":"/videos/4.mp4","playUrl":"/videos/4.mp4"}
,
  {"id":"4 (4).mp4","cover":"/videos/4 (4).mp4","playUrl":"/videos/4 (4).mp4"}
,
  {"id":"4 (5).mp4","cover":"/videos/4 (5).mp4","playUrl":"/videos/4 (5).mp4"}
,
  {"id":"ajf钫a扫将当.mp4","cover":"/videos/ajf钫a扫将当.mp4","playUrl":"/videos/ajf钫a扫将当.mp4"}
,
  {"id":"4 (3).mp4","cover":"/videos/4 (3).mp4","playUrl":"/videos/4 (3).mp4"}
,
  {"id":"速度处房.mp4","cover":"/videos/速度处房.mp4","playUrl":"/videos/速度处房.mp4"}
,
  {"id":"中文.mp4","cover":"/videos/中文.mp4","playUrl":"/videos/中文.mp4"}
,
  {"id":"4 (6).mp4","cover":"/videos/4 (6).mp4","playUrl":"/videos/4 (6).mp4"}
]

但是我通过挂载进docker中的文件和json好像都错误了,前端无法正确读取到我的视频,挫折好大,然后我尝试将/usr/share/nginx/html 挂载到本地查看文件结构,结果也失败了,什么都获取不到,我不知道该从哪里下手了。对不起我提出这么小白的问题

2025-08-20 06:39

我现在知道我需要一个正确的json用来指向本地的视频,json的结构应该是类似

{ "aweme_id": "7255235539543035190", "desc": "眼睛很难说谎🎧 ༘", "create_time": 1689241167, "music": { "id": 7249294205049114000, "title": "当我抬起头 你正看向我", "author": "BALLINLAB", "cover_medium": { "uri": "tos-cn-v-2774c002/oECVoEBEz2brHA9swhtYBOAAHfnPAyAWXNBsGo", "url_list": [ "https://p3.douyinpic.com/aweme/200x200/tos-cn-v-2774c002/oECVoEBEz2brHA9swhtYBOAAHfnPAyAWXNBsGo.jpeg", "https://p6.douyinpic.com/aweme/200x200/tos-cn-v-2774c002/oECVoEBEz2brHA9swhtYBOAAHfnPAyAWXNBsGo.jpeg" ], "width": 720, "height": 720 }, "cover_thumb": { "uri": "tos-cn-v-2774c002/oECVoEBEz2brHA9swhtYBOAAHfnPAyAWXNBsGo", "url_list": [ "https://p3.douyinpic.com/aweme/100x100/tos-cn-v-2774c002/oECVoEBEz2brHA9swhtYBOAAHfnPAyAWXNBsGo.jpeg", "https://p6.douyinpic.com/aweme/100x100/tos-cn-v-2774c002/oECVoEBEz2brHA9swhtYBOAAHfnPAyAWXNBsGo.jpeg" ], "width": 720, "height": 720 }, "play_url": { "uri": "https://sf3-cdn-tos.douyinstatic.com/obj/tos-cn-ve-2774/oseRmSVSolzD16XCGKYVm3ubfgEAo8QnPmAFee", "url_list": [ "https://sf3-cdn-tos.douyinstatic.com/obj/tos-cn-ve-2774/oseRmSVSolzD16XCGKYVm3ubfgEAo8QnPmAFee", "https://sf5-hl-cdn-tos.douyinstatic.com/obj/tos-cn-ve-2774/oseRmSVSolzD16XCGKYVm3ubfgEAo8QnPmAFee" ], "width": 720, "height": 720, "url_key": "7249294205049113402" }, "duration": 30, "user_count": 0, "owner_nickname": "", "is_original": false }, "video": { "play_addr": { "uri": "v0200fg10000cinsbrrc77ua1lo05q8g", "url_list": [ "https://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000cinsbrrc77ua1lo05q8g&line=0&file_id=821fd96bdb844a529d72e35616633bea&sign=7aa8ef04fc349351a93857bc66dede88&is_play_url=1&source=PackSourceEnum_PUBLISH" ], "width": 1080, "height": 1440, "url_key": "v0200fg10000cinsbrrc77ua1lo05q8g_h264_1080p_2226309", "data_size": 2152285, "file_hash": "7aa8ef04fc349351a93857bc66dede88", "file_cs": "c:0-9852-80b7|d:0-1076141-30b4,1076142-2152284-da0f|a:v0200fg10000cinsbrrc77ua1lo05q8g" }, "cover": { "uri": "tos-cn-i-0813/oM5yC32AhDwf0COACg1EWEWAe2tPzAANAtdILC", "url_list": ["ZruEpp52lCRlXK6E-AVdz.png"], "width": 720, "height": 720 }, "poster": "out2.jpg", "height": 2880, "width": 2160, "ratio": "1080p", "use_static_cover": true, "duration": 7734 }, "share_url": "https://www.iesdouyin.com/share/video/7255235539543035190/?region=CN&mid=7249294205049113402&u_code=13kgm680k&did=MS4wLjABAAAAiOgYyZm8XbWZMr5o3OvhR-TEOuNygb_hQOwkie-VXJpDYaR4vZfpiIGBfAWKCFHB&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&share_sign=p8d7MyxqhAzb7Kw5hdHdmSLvAOZdW9MFmGyClNrOSW0-&share_version=170400&ts=1710490642&from_aid=6383&from_ssr=1", "statistics": { "admire_count": 0, "comment_count": 91412, "digg_count": 2792912, "collect_count": 79628, "play_count": 0, "share_count": 167988 }, "status": { "listen_video_status": 0, "is_delete": false, "allow_share": true, "is_prohibited": false, "in_reviewing": false, "part_see": 0, "private_status": 0, "review_result": { "review_status": 0 } }, "text_extra": [], "is_top": 1, "share_info": { "share_url": "https://www.iesdouyin.com/share/video/7255235539543035190/?region=CN&mid=7249294205049113402&u_code=13kgm680k&did=MS4wLjABAAAAiOgYyZm8XbWZMr5o3OvhR-TEOuNygb_hQOwkie-VXJpDYaR4vZfpiIGBfAWKCFHB&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&share_sign=p8d7MyxqhAzb7Kw5hdHdmSLvAOZdW9MFmGyClNrOSW0-&share_version=170400&ts=1710490642&from_aid=6383&from_ssr=1", "share_link_desc": "6.17 cnq:/ p@D.ho 06/25 眼睛很难说谎🎧 ༘ %s 复制此链接,打开Dou音搜索,直接观看视频!" }, "duration": 7734, "image_infos": null, "risk_infos": { "vote": false, "warn": false, "risk_sink": false, "type": 0, "content": "" }, "position": null, "author_user_id": 60685235913, "prevent_download": false, "long_video": null, "aweme_control": { "can_forward": true, "can_share": true, "can_comment": true, "can_show_comment": true }, "images": null, "suggest_words": { "suggest_words": [ { "words": [ { "word": "毛毛姐和刘思瑶", "word_id": "6865974041446978827", "info": "{\"qrec_for_search\":\"{}\"}" } ], "scene": "detail_inbox_rex", "icon_url": "", "hint_text": "", "extra_info": "{}" }, { "words": [ { "word": "毛毛姐和刘思瑶", "word_id": "6865974041446978827", "info": "{\"qrec_for_search\":\"{}\"}" } ], "scene": "comment_top_rec", "icon_url": "", "hint_text": "大家都在搜:", "extra_info": "{}" } ] } },

我是否要完全按照这个json来构建脚本?
我只要本地视频
并不需要封面,文字描述,评论,点赞与收藏的数据,连user都不需要
那json中这些数据,我应该只要虚构就可以了

我看见说明里写到需要通过 axios-mock-adapter https://github.com/ctimmerm/axios-mock-adapter?来返回这样的json

我好像一定要再搭建一个docker 通过Nginx截断数据,伪装出一个后端返回的数据。

07:10
您的镜像中就已经含有了axios-mock-adapter对吧?我只需要构建好JSON,保证数据都齐全就可以了吧?我想我应该先做一个json的demo保证zyronon-douyin能读取到容器外映射成功的视频文件与单视频的一个JSON,并且替换掉所有的demo视频。我会去尝试

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions