更新 play.lua

This commit is contained in:
2026-01-10 02:33:35 +08:00
parent 6c965525e4
commit 5cce70bca2

View File

@@ -14,13 +14,13 @@ if not videoUrl then
print("Example: video_player https://example.com/video.mp4")
return
end
-- 假设 videoUrl, w, h 已定义
local task_id
local status_url
if videoUrl:sub(1,4) ~= "http" then
-- 如果不是 URL则直接当作 task_id 使用(兼容模式?)
-- 如果不是 URL则直接当作 task_id 使用
task_id = videoUrl
status_url = server_url .. "/api/task/" .. task_id
else
@@ -111,11 +111,9 @@ local response = http.get(status_url, {["Content-Type"] = "application/json"})
local finalResp = textutils.unserialiseJSON(response.readAll())
response.close()
-- 注意:最终结果在 result.result 中
videoInfo = finalResp.result.result
-- 此时 videoInfo 包含 frame_urls, audio_dfpwm_url 等字段
-- 可根据需要进一步处理
print("\nTask completed! Total frames: " .. #videoInfo.frame_urls)
-- 播放音频 单通道
@@ -168,7 +166,7 @@ end
-- 分批下载(每批 50 帧)
local BATCH_SIZE = 20
-- local totalFrames = #videoInfo.frame_urls
local totalFrames = videoInfo.fps * 5 -- 仅下载前5秒以节省时间
local totalFrames = videoInfo.fps * 10 -- 仅下载前10秒以节省时间
local allFrameData = {}
for startIdx = 1, totalFrames, BATCH_SIZE do
@@ -178,7 +176,7 @@ for startIdx = 1, totalFrames, BATCH_SIZE do
-- 构造要下载的 URL 列表(相对路径)
local urls = {}
for i = startIdx, endIdx do
-- 假设 videoInfo.frame_urls 是 "/frames/xxx/frame_xxx.png" 这样的相对路径
table.insert(urls, videoInfo.frame_urls[i])
end
@@ -209,8 +207,6 @@ for startIdx = 1, totalFrames, BATCH_SIZE do
sleep(0.1)
end
-- 后续播放时直接使用 allFrameData[frameIndex]
@@ -256,7 +252,7 @@ sleep(1)
-- 播放前已缓存 10 秒
local totalFramesToPlay = #videoInfo.frame_urls
local maxCachedFrames = math.min(videoInfo.fps * 20, totalFramesToPlay) -- 最多缓存 20 秒
local nextDownloadIndex = math.min(videoInfo.fps * 5 + 1, totalFramesToPlay + 1) -- 从第 5 秒后开始继续下载
local nextDownloadIndex = math.min(videoInfo.fps * 10 + 1, totalFramesToPlay + 1) -- 从第 10 秒后开始继续下载
-- 标志:是否还在播放
local running = true
@@ -355,12 +351,12 @@ local function cacheAhead()
break
end
-- 小睡避免过于频繁轮询
-- 小睡
sleep(0.2)
end
end
-- -- 音频播放协程(保持原样)
-- -- 音频播放协程
-- local function playAudio()
-- os.queueEvent("audio_start") -- 触发同步
-- shell.run("bg speakerlib play " ..
@@ -369,7 +365,7 @@ end
-- server_url .. videoInfo.audio_dfpwm_right_url)
-- end
-- 视频渲染协程(稍作优化:及时清理旧帧)
-- 视频渲染协程
local function renderVideo()
local frameIndex2 = 0
local play_fps = videoInfo.fps
@@ -454,7 +450,7 @@ end
-- 启动三个协程
-- 启动协程
parallel.waitForAll(renderVideo, cacheAhead)
local endtime = os.clock()
local time = endtime-starttime1