跳到主要内容
18+ 0597.ai PREMIUM VIDEO DIRECTORY
个人中心
视频首页 热播排行
视频一区
视频一区全部分类 查看全部
精品推荐 主播秀色 日本有码 日本无码 中文字幕 童颜巨乳 性感人妻 强奸乱伦
视频二区
视频二区全部分类 查看全部
欧美情色 三级伦理 卡通动漫 丝袜OL 自拍偷拍 日本片商 剧情介绍 网曝系列
视频三区
视频三区全部分类 查看全部
同性恋 探花嫖娼 国产人妻 国产SM 国产丝袜 麻豆传媒 国产乱伦 明星换脸
视频四区
视频四区全部分类 查看全部
主奴调教 凌辱快感 多人群交 角色剧情 港台辣妹 重口性癖 变性伪娘 VR视角
玉兔资源
玉兔资源全部分类 查看全部
主> roup naåè†0up-las”"ts vIncorporated aåè†0up-las”"ts欧ç¾i clasIncorporated aåè†0up- iv cla > utton utton utton n8` hreps,s ¾>K fb=tse=d"toddodtan}ae=}Ttaa-menu-grid"> "ºutv cla > "ºutv cla 妹查çœ)" ºn§)މex ç ça"vrr �fN2 ton n8` h麻豆ä¼ ¾>Krr �fN2 contend åpŠst/4?su-v2ype=72">VR视角 -solid f/4?su-v2ype=72">VR视è large number of ( ut/ isrr""åmd?.rŒv"l2">VRè§">查>VRè§" <>VRè§" VR视è-las”"tsKrr �fN2 contend åpŠst/4?sufounæ …好极å orated aåè†0up- iv cla > aåè†0s:view�å ¾>Krr �fN2 oup"> pŠst/4?sufounæ …好极çlass="·ice-widt4?sufounæ …好ætc}ial-s f …好ætså/"tts f "æo -º« …奻¶…好极品台¥½ætc}ial-s f …好ætså/"tt‰5G®teaelnskanoi8®Vl=“="Œ display: none;">='oŽ ='oŽ 1在线播放 - ¾>Krr � iv> 0­t/list r� gi¥看全部 =rie communicate —c 7gåe®lVi® iv> nea �·g iv> st† - ytone;">7gåe®lVi® iv> nea �·g iv>nålist r�unè`eeeeeee®lVt­+xe®lVipgVRè§f5ä+ m}kt}2.css?�å orated aåè†0up- iv cla > aåè†0s:view�å 026åmobis’©a orated aå� utton ytone;" ta1é ƒ…ºl sv clasub_type;" ta1é m2N//cda> -soPhoti ta1é m21集 t† - yto iv>
//cda> -soPhoti ta1é m21集 ‚71">变性 -soPhoa > utsoPhoa > utsoPh ƒ…ooPhot> //cda> -> -soPhoti ta1é ma > utsoPh y‹aile-nav-iål-då§ 跳到主要内容 site-header-soPhodiv //cda> shell header-main-soPhPhoa //cda> brandoti ta1é/" aria-label="scripti 首页-soPhPh age-mark">18+ brand-copy-soPhPh scriptionbsoPhPh PREMIUM VIDEO DIRECTORYoPhPh header-search" action="/search" method="get" role="search">oPhPh oPhPh siteSearch"Vi®mec wdorated asearch" value="" placeholder="搜索视频标题" autocomplete="off">oPhPh fa-solid fa-magnifying-glass">立即搜索oPhPh header-actions">oPhPh header-actionorated abutton" data-open-history>oPhPh fa-solid fa-clock-rotate-left">iv cla记录oPhPhPh
auth-actions">oPhPh login-button" ated abutton" data-open-login>登录oPhPh register-button" ated abutton" data-open-register>注册oPhPhPh
oPhPhPh
user-menu" hidden>oPhPh user-menu-toggle" ated abutton" aria-expanded="false">oPhPh user-avatar"rid="userAvatarFallback"> fa-solid fa-user">用户 fa-solid fa-chevron-down">oPhPh oPhPh
user-menu-panel" hidden>oPhPh Phoa i ta1é/user/profile"> fa-solid fa-user-gear">个人中心 fa-solid fa-right-from-bracket">退出登录oPhPh
oPhPhPh
oPhPh
oPh
ooPhodiv //cda> primary-row">oPhPh
shell primary-nav unified-nav" aria-label="主导航与频道导航">oPhPh oa //cda> mobile-nav-itemoti ta1é/">视频首页 mobile-nav-itemoti ta1é/ranking">热播排行 nav-group">oPhPh oa i ta1é/list/1">oPhPh 视频一区 fa-solid fa-chevron-down">oPhPh mega-menu">oPhPh
mega-menu-head">oPhPh 视频一区全部分类onbsoPhPh oa i ta1é/list/1">查看全部oPhhhhhhhhh
mega-menu-grid">oPhPh oPhPh oa i ta1é/list/1?sub_ated 41">精品推荐主播秀色日本有码日本无码中文字幕童颜巨乳性感人妻强奸乱伦oPhhhhhhh
oPhhhhhhhoPhhhhh
oPhhhhhoPhhhhhoPhhhhhoPhhhhh
nav-group">oPhPh oa i ta1é/list/2">oPhPh 视频二区 fa-solid fa-chevron-down">oPhPh mega-menu">oPhPh
mega-menu-head">oPhPh 视频二区全部分类onbsoPhPh oa i ta1é/list/2">查看全部oPhhhhhhhhh
mega-menu-grid">oPhPh oPhPh oa i ta1é/list/2?sub_ated 49">欧美情色三级伦理卡通动漫丝袜OL自拍偷拍日本片商剧情介绍网曝系列oPhhhhhhh
oPhhhhhhhoPhhhhh
oPhhhhhoPhhhhhoPhhhhhoPhhhhh
nav-group">oPhPh oa i ta1é/list/3">oPhPh 视频三区 fa-solid fa-chevron-down">oPhPh mega-menu">oPhPh
mega-menu-head">oPhPh 视频三区全部分类onbsoPhPh oa i ta1é/list/3">查看全部oPhhhhhhhhh
mega-menu-grid">oPhPh oPhPh oa i ta1é/list/3?sub_ated 57">同性恋探花嫖娼å 人妻å SMå 丝袜麻豆传媒å 乱伦明星换脸oPhhhhhhh
oPhhhhhhhoPhhhhh
oPhhhhhoPhhhhhoPhhhhhoPhhhhh
nav-group">oPhPh oa i ta1é/list/4">oPhPh 视频四区 fa-solid fa-chevron-down">oPhPh mega-menu">oPhPh
mega-menu-head">oPhPh 视频四区全部分类onbsoPhPh oa i ta1é/list/4">查看全部oPhhhhhhhhh
mega-menu-grid">oPhPh oPhPh oa i ta1é/list/4?sub_ated 65">主奴调教凌辱快感多人群交角色剧情港台辣妹重口性癖变性伪娘VR视角oPhhhhhhh
oPhhhhhhhoPhPh
oPhhhhhoPhhhhhoPhhhhhoPhhhhh
nav-group nav-group-last">oPhPh oa i ta1é/list/40">oPhPh 玉兔资源 fa-solid fa-chevron-down">oPhPh mega-menu">oPhPh
mega-menu-head">oPhPh 玉兔资源全部分类onbsoPhPh oa i ta1é/list/40">查看全部oPhhhhhhhhh
mega-menu-grid">oPhPh oPhPh oa i ta1é/list/40?sub_ated 73">å 精品oPhhhhhhh
oPhhhhhhhoPhPh
oPhhhhhoPhhhhhoa //cda> nav-channel-link mobile-nav-itemoti ta1é/channel/china">中国频道 nav-channel-link mobile-nav-itemoti ta1é/channel/japan">日韩频道 nav-channel-link mobile-nav-itemoti ta1é/channel/western">欧美频道 nav-channel-link mobile-nav-itemoti ta1é/channel/ethics">剧情伦理 nav-channel-link mobile-nav-itemoti ta1é/channel/anime">动漫频道 nav-channel-link mobile-nav-itemoti ta1é/channel/alternative">另类专区 nav-channel-link mobile-nav-item nav-search-linkoti ta1é/search"so fa-solid fa-magnifying-glass" aria-hidden="true">oPhPh nav-channel-link nav-favorite-linkoti ta1é/user/profile">我的收藏oPh
oiv> ooPhomainrid="main- ƒ">oPhPh
VRè§f5ä+ m}kt}2.css?�å " data-video-poster1é ma > //voddadaizi.com:52866/videos/202501/22/67909290f9a2e9b1d4bf5916/cover.jpg" data-video-year="" data-video-//cda> 港台辣妹" data-episode-i®mec çrated " data-play-source="0" data-play-index="0" data-need-vip="0" data-fallback-url1é ma > //voddadaizi.com:52866/videos/202501/22/67909290f9a2e9b1d4bf5916/478e48/index.m3u8">
o
shell page-shell"so
breadcrumb" aria-label="面包屑"so oa i ta1é/">首页/ breadcrumb-curren>变性 -sdetail/6a523503a762bc9f61b104fc" 第1é =rie communicat/o Phoheader //cda> player-heading">oPhPhodiv>oPhhhhh eyebrow">NOW PLAYING ·clink r =rie communicate·ea �·g ioPhhhhhoPhhh
o hPhoa //cda> secondary-button" ˜性 -sdetail/6a523503a762bc9f61b104fc" 翔回详情 o
player-stage"rid="playerStage"raria-label="视频iv cla区域">oPhPhodiv //cda> access-message"rid="playerLoading">oPhPhPhodiv>oPhhhhh fa-solid fa-circle-notch fa-spin">oPhPh

正在验证iv cla权限

oPhPh

验证完成后自动载入iv cla器。

oPhhhhh
o hPho/div>o hooPhodiv //cda> episode-controls">oPhPho hPhospan //cda> episode-i®v disabled"> fa-solid fa-chevron-left"> 上一g i当前iv cla:a �·g i episode-i®v disabled">下一g i  fa-solid fa-chevron-right">ooPhodiv //cda> player-toolbar-soPh

data-note"siv cla记录、收藏和点赞仅写入当前iµ�览器;VIP 状态由服务器翔回。

oPhhh
detail-actions">oPhPh local-action"oPhPh tted abutton"oPhPh data-video-favoriteoPhPh data-video-id="6a523503a762bc9f61b104fc" h data-video-Ounè`nè`eeeeeee®lVt­+xe®lVipgVRè§f5ä+ m}kt}2.css?�å " data-video-poster1é ma > //voddadaizi.com:52866/videos/202501/22/67909290f9a2e9b1d4bf5916/cover.jpg" data-video-url1ésdetail/6a523503a762bc9f61b104fc" h fa-regular fa-heart">iœ¬机收藏oPhPh local-action" ated abutton" data-video-like data-video-id="6a523503a762bc9f61b104fc" h fa-regular fa-thumbs-up">iœ¬机点赞oPhPh secondary-button" ated abutton" data-share-Ounè`nè`eeeeeee®lVt­+xe®lVipgVRè§f5ä+ m}kt}2.css?�å "> h fa-solid fa-share-nodes">分享 h oPhPho/div>o h
ooPhodetails //cda> ƒ-card source-switcher-card" data-source-switcher>oPhPhosummary>oPhPh source-switcher-Ounè`"> fa-solid fa-list">iv cla源与剧é ilink re·ea �·g ioPhPh fa-solid fa-chevron-down" aria-hidden="true">oPhPhoPhPh
source-switcher- ƒ">oPhPh
source-tabs" role="tablist" aria-label="iv cla源">oPhPhhhoPhhhhhobuttonoPhPhhh rid="playerSourceTab0" h //cda> source-tab" h ated abutton" h role="tab" h data-source-index="0" h aria-selected="true" h aria-controls="playerSourcePanel0">oPhPh link roPhPh oPhPh oPhPh
ooPh oPhPhoPhPh
episode-panel" role="tabpanel" aria-labelledby="playerSourceTab0" >oPhPhhh
episode-list">oPhPhhh oPhPhPhPh active" aria-curren>="page">oPhPh ç �·g i h oPhPh
oPhPhoPhPh
oPhooPhooPhodl //cda> meta-grid">oPhPhodiv>
语言
未知
oPhPh
类型
港台辣妹
oPhPh
地区
未知
oPhPh
年份
未知
oPhooPh
ƒ-section">oPhPhodiv //cda> section-head">oPhPh

相关推荐

同分类内容继续iµ�览

oPhPhPhoa //cda> section-more" ˜性 -sdetail/6a523503a762bc9f61b104fc" 查看当前详情oPhPh Ph
video-grid">oPhPh oPhPh
video-card">oPhPh oa i ta1é/detail/6a523503a762bc9f61b0ffa7">oPhPh
cover-frame">oPhPh //imgdanaizi1.com:8660/videos/202604/14/69dd078cfa0a4ed4c7f32fec/poster2.jpg" alt="泄密流出台灣.大夜班巡房被推倒在病床上成為病人洩慾工具封面" width="640" height="360" loading="lazy" decoding="async">oPhPh oPhPh oPhPh
oPhPhPh

泄密流出台灣.大夜班巡房被推倒在病床上成為病人洩慾工具

oPhPhPh
card-meta">oPhPh 港台辣妹oPhPh iŒ�续更新oPhPhPh video-card">oPhPh oa i ta1é/detail/6a523503a762bc9f61b0ffa8">oPhPh
cover-frame">oPhPh //imgdanaizi1.com:8660/videos/202604/12/69daa0f9e407cfd4b87b9edc/poster2.jpg" alt="精品泄密VipgoPhPh oPhPh oPhPh
oPhPhPh

精品泄密VipgoPhPhPh
card-meta">oPhPh 港台辣妹oPhPh iŒ�续更新oPhPhPh video-card">oPhPh oa i ta1é/detail/6a523503a762bc9f61b0ffa9">oPhPh
cover-frame">oPhPh //imgdanaizi1.com:8660/videos/202604/02/69ce6d347405efd4a40f1839/poster2.jpg" alt="网黄 台北娜娜 勾引超正性感富婆封面" width="640" height="360" loading="lazy" decoding="async">oPhPh oPhPh oPhPh
oPhPhPh

网黄 台北娜娜 勾引超正性感富婆

oPhPhPh
card-meta">oPhPh 港台辣妹oPhPh iŒ�续更新oPhPhPh video-card">oPhPh oa i ta1é/detail/6a523503a762bc9f61b0ffaa">oPhPh
cover-frame">oPhPh //imgdanaizi1.com:8660/videos/202604/02/69ce6c157405efd4a40f14f3/poster2.jpg" alt="VipgoPhPh oPhPh oPhPh
oPhPhPh

VipgoPhPhPh
card-meta">oPhPh 港台辣妹oPhPh iŒ�续更新oPhPhPh video-card">oPhPh oa i ta1é/detail/6a523503a762bc9f61b0ffab">oPhPh
cover-frame">oPhPh //imgdanaizi1.com:8660/videos/202603/23/69be7dc07405efd4a4f673fa/poster2.jpg" alt="泄密流出台湾女警性爱啪啪视频iµ�出.我感觉没有张津瑜好看啊封面" width="640" height="360" loading="lazy" decoding="async">oPhPh oPhPh oPhPh
oPhPhPh

泄密流出台湾女警性爱啪啪视频iµ�出.我感觉没有张津瑜好看啊

oPhPhPh
card-meta">oPhPh 港台辣妹oPhPh iŒ�续更新oPhPhPh video-card">oPhPh oa i ta1é/detail/6a523503a762bc9f61b0ffac">oPhPh
cover-frame">oPhPh //imgdanaizi1.com:8660/videos/202603/03/69a53b8ba2e255d4e1849e03/poster2.jpg" alt="湾湾校花情侣啪啪视频被渣男曝光台北南港中学美女校花.和前an> •ª啪封面" width="640" height="360" loading="lazy" decoding="async">oPhPh oPhPh oPhPh
oPhPhPh

湾湾校花情侣啪啪视频被渣男曝光台北南港中学美女校花.和前an> •ª啪

oPhPhPh
card-meta">oPhPh 港台辣妹oPhPh iŒ�续更新oPhPhPh oPhPh h

o
ooPhooPhofooter //cda> site-footer">oPhPh
shell footer-grid compact-footer">oPhPhPh
footer-about">oPhPhhh oa //cda> brand footer-brandoti ta1é/" aria-label="scripti 首页-soPhPh age-mark">18+ brand-copy-soPhPh scriptionbsoPhPh PREMIUM VIDEO DIRECTORYoPhPh 真实分类、频道、搜索、iv cla与iœ¬机记录。

oPhhh h
o hh
oPhPhhh ob>内容频道onbsoPhPh oa i ta1é/channel/china">中国频道日韩频道欧美频道动漫频道o
oPhPhhh ob>发现内容onbsoPhPh oa i ta1é/ranking">热播排行剧情伦理另类专区o
oPhPhhh ob>用户服务onbsoPhPh obutton ated abutton" data-open-history>iv cla记录oPhPh oa i ta1é/user/profile">我的收藏登录账号oPhPh oa i ta1é/terms">用户协议o
oPhPh
shell footer-bottom">oPhPhhh© 2026 scriptionspansoPhPh oa i ta1é/privacy">隐私政策联系我们oPhooPhonav //cda> mobile-dock" aria-label="移动端快捷导航">oPhPhoa i ta1é/"> fa-solid fa-house">首页 fa-solid fa-fire">排行 fa-solid fa-magnifying-glass">搜索 fa-solid fa-clock-rotate-left">记录 fa-solid fa-user">我的o Phodiv //cda> modal"rid="loginModal"rrole="dialog" aria-modal="true" aria-labelledby="loginTunè`" hidden>oPhPhodiv //cda> modal-backdrop" data-close-modal="loginModal">
oPhPh
modal-card">oPhPh obutton //cda> modal-close" ated abutton" data-close-modal="loginModal" aria-label="关闭登录窗口">× modal-kicker">欢迎回来登录账号登录后可使用 VIP 权限、卡券和个人中心。

oPhhh h
oPhPhhh oPhPh loginUsername"Vi®mec username"Vautocomplete="username"Vminlength="3" maxlength="32" required>oPhPhhh oPhPh loginPassword"Vi®mec password"Vated apassword"Vautocomplete="curren>-password"Vminlength="6" maxlength="72" required>oPhPhhh

form-message"rdata-form-message>

oPhhh h obutton //cda> primary-button" ated asubmit">登录 text-button" ated abutton" data-switch-modal="registerModal">没有账号?立即注册oPhPh
o
o Phodiv //cda> modal"rid="registerModal"rrole="dialog" aria-modal="true" aria-labelledby="registerTunè`" hidden>oPhPhodiv //cda> modal-backdrop" data-close-modal="registerModal">
oPhPh
modal-card">oPhPh obutton //cda> modal-close" ated abutton" data-close-modal="registerModal" aria-label="关闭注册窗口">× modal-kicker">创建账号注册新用户用户名支持字母、数字和下划线,密码长度为 6-72 位。

oPhhh hoPhPhhh oPhPh registerUsername"Vi®mec username"Vautocomplete="username"Vpattern="[A-Za-z0-9_]{3,32}" required>oPhPhhh oPhPh registerEmail"Vi®mec email"Vated aemail"Vautocomplete="email"Vrequired>oPhPhhh oPhPh registerPassword"Vi®mec password"Vated apassword"Vautocomplete="new-password"Vminlength="6" maxlength="72" required>oPhPhhh oPhPh registerConfirmPassword"Vi®mec confirmPassword"Vated apassword"Vautocomplete="new-password"Vminlength="6" maxlength="72" required>oPhPhhh

form-message"rdata-form-message>

oPhhh h obutton //cda> primary-button" ated asubmit">注册并登录 text-button" ated abutton" data-switch-modal="loginModal">已有账号?翔回登录o o Phoaside //cda> history-drawer"rid="historyDrawer"rhidden>oPhPhobutton //cda> history-backdrop" ated abutton" data-close-history aria-label="关闭æv cla记录"soPhPh
history-panel" role="dialog" aria-modal="true" aria-labelledby="historyTunè`" tabindex="-1" data-history-panelsohhh o> obutton //cda> history-back" ated abutton" data-close-history aria-label="翔回上一g¡µ-soPhPh fa-solid fa-chevron-left" aria-hidden="true">oPhPh 翔回oPhPh Phodiv //cda> history-Ounè`">oPhPh æv cla记录仅保存在当前设备

oPhhh h o/div>oPhPh obutton //cda> history-close" ated abutton" data-close-history aria-label="关闭æv cla记录"soPhPh Phoi //cda> fa-solid fa-xmark" aria-hidden="true">oPhPh odiv //cda> history-overview">oPhPh 0oPhPh 暂无最近iv claoPhPh oPhPh odiv //cda> history-list-heading">oPhPh 观看列表0 / 0oPhPh oPhPh
history-list" data-history-listrrole="list" aria-live="polite">
oPhPhPhofooter>o

fa-solid fa-mobile-screen-button" aria-hidden="true">最多保留 30 条iœ¬机记录

oPhhh h obutton //cda> history-clear" ated abutton" data-clear-history>oPhhh h Phoi //cda> fa-solid fa-trash-can" aria-hidden="true">清空记录oPhhh h o/buttonso o
o o Phodiv //cda> toast"rid="siteToast"rrole="status" aria-live="polite">ooPhjs/analytics.j> utsoPh track2" defer>oPhjs/app.j> utsoPh ui3" defer>oPhjs/navbar.j> utsoPcda> - defer>oPhjs/ utsoPhoj> utsoPcda> - defer>oPhto is ico src1ésoPhoa >js/hls集 tjs"> is ico > (() => { const config = document.getElementById("playerConfig"); const stage = document.getElementById("playerStage"); const nextLink = document.getElementById("nextEpisode"); const pendingPlayerEvents = []; let hls = null; let player = null; let trackingTimer = 0; let trackingAttempts = 0; function flushPlayerEvents() { trackingTimer = 0; if (window.FlowTrack?.track) { while (pendingPlayerEvents.length) { const event = pendingPlayerEvents.shift(); window.FlowTrack.track(event.name, event.properties); } return; } trackingAttempts += 1; if (pendingPlayerEvents.length && trackingAttempts < 100) { trackingTimer = window.setTimeout(flushPlayerEvents, 50); } } function trackPlayer(name, properties = {}) { const event = { name, properties: { video_id: config.dataset.videoId, authenticated: Boolean(localStorage.getItem( auth_token")), need_vip: Number(config.dataset.needVip || "0"), play_source: config.dataset.playSource, play_index: config.dataset.playIndex, ...properties } }; if (window.FlowTrack?.track) { window.FlowTrack.track(event.name, event.properties); return; } pendingPlayerEvents.push(event); if (!trackingTimer) trackingTimer = window.setTimeout(flushPlayerEvents, 0); } function durationBucket(seconds) { if (!Number.isFinite(seconds) || seconds <= 0) return "unknown"; if (seconds < 300) return "under_5m"; if (seconds < 1200) return "5m_20m"; if (seconds < 3600) return "20m_60m"; return "over_60m"; } function progressBucket(video) { const duration = Number(video.duration); const curren>Time = Number(video.curren>Time); if (!Number.isFinite(duration) || duration <= 0 || !Number.isFinite(curren>Time)) { return "unknown"; } const percent = Math.max(0, Math.min(100, (curren>Time / duration) * 100)); if (percent < 25) return "0_25"; if (percent < 50) return "25_50"; if (percent < 75) return "50_75"; if (percent < 90) return "75_90"; return "90_100"; } function authH Time = Number(video?.curren>Time); const duration = Number(video?.duration); if (Number.isFinite(curren>Time) && curren>Time >= 0) record.curren>Time = curren>Time; if (Number.isFinite(duration) && duration > 0) record.duration = duration; items = items.filter(item => item.id !== record.id); items.unshift(record); localStorage.setItem(key, JSON.stringify(items.slice(0, 30))); window.dispatchEvent(new CustomEvent("flow:history-updated")); } function showAccessMessage(message, action) { stage.replaceChildren(); const wrap = document.createElement("div"); wrap.//cdaName = access-message"; const box = document.createElement("div"); const icon = document.createElement("i"); s’©a //cdaName = fa-solid fa-crown"; const Ounè` = document.createElement("h2"); Ounè`.textC ƒ = "VIP æv cla权限"; const Oext = document.createElement("p"); Oext.textC ƒ = message; box.append(icon, Ounè`, Oext); if (action) box.append(action); wrap.append(box); stage.append(wrap); } function bindPlaybackTracking(video, mediaType) { const milestones = new Set(); let lastPlaybackTime = 0; let seekOrigin = 0; const playbackProperties = () => ({ media_ated: mediaType, duration_bucket: durationBucket(Number(video.duration)), progress_bucket: progressBucket(video) }); video.addEventListener("play", () => { trackPlayer("player_play", playbackProperties()); }); video.addEventListener("pause", () => { trackPlayer("player_pause", playbackProperties()); savePlayHistory(video); }); video.addEventListener("seeking", () => { seekOrigin = lastPlaybackTime; }); video.addEventListener("seeked", () => { const curren>Time = Number(video.curren>Time); trackPlayer("player_seek", { ...playbackProperties(), direction: curren>Time < seekOrigin ? "previous" : "next" h}); if (Number.isFinite(curren>Time)) lastPlaybackTime = curren>Time; }); video.addEventListener("timeupdate", () => { const duration = Number(video.duration); const curren>Time = Number(video.curren>Time); if (!Number.isFinite(duration) || duration <= 0 || !Number.isFinite(curren>Time)) return; const percent = (curren>Time / duration) * 100; for (const milestone of [25, 50, 75, 90]) { if (percent < milestone || milestones.has(milestone))é inue; milestones.add(milestone); trackPlayer("player_milestone", { media_ated: mediaType, milestone, duration_bucket: durationBucket(duration) }); } lastPlaybackTime = curren>Time; }); video.addEventListener("ended", () => { trackPlayer("player_complete", playbackProperties()); savePlayHistory(video); showNextPrompt(); }); video.addEventListener("error", () => { trackPlayer("player_fatal_error", { media_ated: mediaType, error_ated: "media", error_code: video.error?.code ? `media_${video.error.code}` : "media_unknown", fatal: trueoPhPh }); }); } async function startPlayback(video) { video.muted = false; try { await video.play(); return; } catch (_) {} video.muted = true; try { await video.play(); } catch (_) { video.muted = false; } } function playlistPathKey(uri, baseUrl) { try { return new URL(uri, baseUrl).pathnameoPhPh .split("/") .filter(Boolean) .slice(0, 3) .join("/"); } catch (_) { return ""; } } function firstVariantUrl(manifest, baseUrl) { const lines = manifest.split(/\r?\n/).map(line => line.trim()); for (let index = 0; index < lines.length; index += 1) { if (!lines[index].startsWith("#EXT-X-STREAM-INF"))é inue; const variant = lines.slice(index + 1).find(line => line && !line.startsWith("#")); if (variant) return new URL(variant, baseUrl).