Showing source for: https://openblox.io/
Duration: 0.397123s
Server: TencentEdgeOne
<!DOCTYPE html>
<html lang="vi" style="margin-top: 0px !important">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="/wp-content/themes/cakhiatv/style.css" />
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
<link rel="icon" href="/favicon.ico" type="image/x-icon" />
<style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style>
<!-- Tá»i ưu hóa công cụ tìm kiếm bá»i Rank Math PRO - https://rankmath.com/ -->
<title>Xoilac TV | Trá»±c Tiếp Bóng Äá HD - Link Xôi Lạc TV #1 Hôm Nay</title>
<meta name="description" content="Xoilac TV trá»±c tiếp bóng Äá HD hà ng Äầu Viá»t Nam, ÄÆ°á»ng truyá»n á»n Äá»nh, Äa dạng link trá»±c tuyến, Äa dạng giải Äấu, BLV chuyên môn cao và hoà n toà n miá»
n phÃ."/>
<meta name="robots" content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"/>
<link rel="canonical" href="https://openblox.io" />
<meta property="og:locale" content="vi_VN" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Xoilac TV | Trá»±c Tiếp Bóng Äá HD - Link Xôi Lạc TV #1 Hôm Nay" />
<meta property="og:description" content="Xoilac TV trá»±c tiếp bóng Äá HD hà ng Äầu Viá»t Nam, ÄÆ°á»ng truyá»n á»n Äá»nh, Äa dạng link trá»±c tuyến, Äa dạng giải Äấu, BLV chuyên môn cao và hoà n toà n miá»
n phÃ." />
<meta property="og:url" content="https://openblox.io" />
<meta property="og:site_name" content="Xoilac TV | Trá»±c Tiếp Bóng Äá HD - Link Xôi Lạc TV #1 Hôm Nay" />
<meta property="og:updated_time" content="2025-11-13T23:12:37+07:00" />
<meta property="og:image" content="https://cdn.adminmypham.site/wp-content/uploads/2025/07/logo-squared.jpg" />
<meta property="og:image:secure_url" content="https://cdn.adminmypham.site/wp-content/uploads/2025/07/logo-squared.jpg" />
<meta property="og:image:width" content="1080" />
<meta property="og:image:height" content="1080" />
<meta property="og:image:alt" content="xoilac tv" />
<meta property="og:image:type" content="image/jpeg" />
<meta property="article:published_time" content="2025-06-22T18:41:07+07:00" />
<meta property="article:modified_time" content="2025-11-13T23:12:37+07:00" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Xoilac TV | Trá»±c Tiếp Bóng Äá HD - Link Xôi Lạc TV #1 Hôm Nay" />
<meta name="twitter:description" content="Xoilac TV trá»±c tiếp bóng Äá HD hà ng Äầu Viá»t Nam, ÄÆ°á»ng truyá»n á»n Äá»nh, Äa dạng link trá»±c tuyến, Äa dạng giải Äấu, BLV chuyên môn cao và hoà n toà n miá»
n phÃ." />
<meta name="twitter:image" content="https://cdn.adminmypham.site/wp-content/uploads/2025/07/logo-squared.jpg" />
<meta name="twitter:label1" content="ÄÆ°á»£c viết bá»i" />
<meta name="twitter:data1" content="Vương Triá»u VÅ©" />
<meta name="twitter:label2" content="Thá»i gian Äá» Äá»c" />
<meta name="twitter:data2" content="16 phút" />
<script type="application/ld+json" class="rank-math-schema-pro">{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://openblox.io/#organization","name":"Xoilac TV","sameAs":["https://www.youtube.com/@xoilacbachdangco","https://www.reddit.com/user/xoilacbachdangco/","https://www.pinterest.com/xoilacbachdangco/","https://www.tumblr.com/xoilacbachdangco","https://www.quora.com/profile/Xoilacbachdangco","https://issuu.com/xoilacbachdangco"],"logo":{"@type":"ImageObject","@id":"https://openblox.io/#logo","url":"https://cdn.xoilac88xg.cc/wp-content/uploads/2025/07/logo-squared.jpg","contentUrl":"https://cdn.xoilac88xg.cc/wp-content/uploads/2025/07/logo-squared.jpg","caption":"Xoilac TV | Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 HD - Link X\u00f4i L\u1ea1c TV #1 H\u00f4m Nay","inLanguage":"vi","width":"1080","height":"1080"}},{"@type":"WebSite","@id":"https://openblox.io/#website","url":"https://openblox.io","name":"Xoilac TV | Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 HD - Link X\u00f4i L\u1ea1c TV #1 H\u00f4m Nay","alternateName":"Xoilac TV | Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 HD - Link X\u00f4i L\u1ea1c TV #1 H\u00f4m Nay","publisher":{"@id":"https://openblox.io/#organization"},"inLanguage":"vi","potentialAction":{"@type":"SearchAction","target":"https://openblox.io/?s={search_term_string}","query-input":"required name=search_term_string"}},{"@type":"ImageObject","@id":"https://cdn.adminmypham.site/wp-content/uploads/2025/07/logo-squared.jpg","url":"https://cdn.adminmypham.site/wp-content/uploads/2025/07/logo-squared.jpg","width":"1080","height":"1080","inLanguage":"vi"},{"@type":"WebPage","@id":"https://openblox.io#webpage","url":"https://openblox.io","name":"Xoilac TV | Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 HD - Link X\u00f4i L\u1ea1c TV #1 H\u00f4m Nay","datePublished":"2025-06-22T18:41:07+07:00","dateModified":"2025-11-13T23:12:37+07:00","about":{"@id":"https://openblox.io/#organization"},"isPartOf":{"@id":"https://openblox.io/#website"},"primaryImageOfPage":{"@id":"https://cdn.adminmypham.site/wp-content/uploads/2025/07/logo-squared.jpg"},"inLanguage":"vi"},{"@type":"Person","@id":"https://openblox.io/author/vuongtrieuvu","name":"V\u01b0\u01a1ng Tri\u1ec7u V\u0169","url":"https://openblox.io/author/vuongtrieuvu","image":{"@type":"ImageObject","@id":"https://secure.gravatar.com/avatar/25585f2404eae6739b03e93fc25ec832098a5595d3d9f9ea238cdb873130c508?s=96&d=mm&r=g","url":"https://secure.gravatar.com/avatar/25585f2404eae6739b03e93fc25ec832098a5595d3d9f9ea238cdb873130c508?s=96&d=mm&r=g","caption":"V\u01b0\u01a1ng Tri\u1ec7u V\u0169","inLanguage":"vi"},"worksFor":{"@id":"https://openblox.io/#organization"}},{"@type":"Article","headline":"Xoilac TV | Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 HD - Link X\u00f4i L\u1ea1c TV #1 H\u00f4m Nay","keywords":"xoilac tv","datePublished":"2025-06-22T18:41:07+07:00","dateModified":"2025-11-13T23:12:37+07:00","author":{"@id":"https://openblox.io/author/vuongtrieuvu","name":"V\u01b0\u01a1ng Tri\u1ec7u V\u0169"},"publisher":{"@id":"https://openblox.io/#organization"},"description":"Xoilac TV tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 HD h\u00e0ng \u0111\u1ea7u Vi\u1ec7t Nam, \u0111\u01b0\u1eddng truy\u1ec1n \u1ed5n \u0111\u1ecbnh, \u0111a d\u1ea1ng link tr\u1ef1c tuy\u1ebfn, \u0111a d\u1ea1ng gi\u1ea3i \u0111\u1ea5u, BLV chuy\u00ean m\u00f4n cao v\u00e0 ho\u00e0n to\u00e0n mi\u1ec5n ph\u00ed.","name":"Xoilac TV | Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 HD - Link X\u00f4i L\u1ea1c TV #1 H\u00f4m Nay","@id":"https://openblox.io#richSnippet","isPartOf":{"@id":"https://openblox.io#webpage"},"image":{"@id":"https://cdn.adminmypham.site/wp-content/uploads/2025/07/logo-squared.jpg"},"inLanguage":"vi","mainEntityOfPage":{"@id":"https://openblox.io#webpage"}}]}</script>
<!-- /Plugin SEO WordPress Rank Math -->
<link rel='dns-prefetch' href='//cdn.openblox.io' />
<script type="text/javascript">
/* <![CDATA[ */
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.1.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.1.0\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/cdn.openblox.io\/wp-content\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.8.1"}};
/*! This file is auto-generated */
!function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\ud83d\udd25","\ud83d\udc26\u200b\ud83d\udd25")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings);
/* ]]> */
</script>
<style id='wp-emoji-styles-inline-css' type='text/css'>
img.wp-smiley, img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 0.07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
</style>
<link rel='stylesheet' id='wp-block-library-css' href='https://cdn.openblox.io/wp-content/wp-includes/css/dist/block-library/style.min.css?ver=6.8.1' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='ez-toc-css' href='https://cdn.openblox.io/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.74' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li , div#ez-toc-container ul li a {font-size: 95%;}div#ez-toc-container ul li , div#ez-toc-container ul li a {font-weight: 500;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, '.', decimal) '. ';display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, '.', decimal) '. ';display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='main-style-css' href='https://cdn.openblox.io/wp-content/themes/cakhiatv/style.css?ver=6.8.1' type='text/css' media='all' />
<script type="text/javascript" src="https://cdn.openblox.io/wp-content/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
<script type="text/javascript" src="https://cdn.openblox.io/wp-content/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script>
<link rel="https://api.w.org/" href="https://openblox.io/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://openblox.io/wp-json/wp/v2/pages/1060" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://openblox.io/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 6.8.1" />
<link rel='shortlink' href='https://openblox.io/' />
<link rel="alternate" title="oNhúng (JSON)" type="application/json+oembed" href="https://openblox.io/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fopenblox.io%2F" />
<link rel="alternate" title="oNhúng (XML)" type="text/xml+oembed" href="https://openblox.io/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fopenblox.io%2F&format=xml" />
<style>
@media (min-width: 1024px) {
h1 {
font-size: 1.5em !important;
}
}
.match-teams-score {
display: flex !important;
}
@media (max-width: 767px) {
.xgplayer .xg-inner-controls {
height: 60px !important;
}
.header .logo img{
height: 35px;
}
}
@media (min-width: 481px) and (max-width: 767px) {
div#chat_messages {
max-height: 60vh !important;
}
}
</style>
<style>
.match-section {
min-height: 4800px;
}
.match-card__status {
position: absolute;
top: 13%;
left: 50%;
transform: translate(-50%, -50%);
}
.match-card__stats-content {
background: none !important;
box-shadow: none !important
}
@media (max-width: 480px) {
.team__logo {
width: 40px !important;
height: 40px !important;
}
.match-card__league {
max-width: 100px;
}
.match-card__time {
max-width: 100px;
}
.match-card__status {
max-width: 120px;
order: 1 !important;
font-size: 12px
}
.streaming {
padding: 4px;
}
.btn-view-truc-tiep {
padding: 8px 4px !important;
font-size: 12px;
}
.match-card__stats-content {
display: block !important;
}
.match-card__stats {
display: block !important
}
}
@media (min-width: 768px) and (max-width: 1024px) {
.match-card__status {
position: absolute;
top: 13%;
left: 50%;
transform: translate(-50%, -50%);
}
.match-card__league {
max-width: 110px;
}
}
</style>
<!-- Google tag (tá»ng) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-V8GXMSME5N"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-V8GXMSME5N');
</script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-DKKD5K87H5"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-DKKD5K87H5');
</script>
</head>
<body>
<!-- Header -->
<header class="header">
<div class="container">
<div class="header__inner">
<a href="/" class="logo">
<img src="/wp-content/uploads/2025/07/logo_xoilactv.png" alt="Xoilac TV" style="max-height: 50px"/>
</a>
<div style="display: flex; align-items: center">
<nav class="nav">
<button class="nav__toggle">
<img src="https://cdn.openblox.io/wp-content/themes/cakhiatv/assets/images/hamburger.svg" alt="Menu" />
</button>
<ul class="nav__menu">
<button class="nav__close" aria-label="Close menu"></button>
<li class="nav__item"><a href="/" class=" active">TRANG CHỦ</a></li><li class="nav__item"><a href="https://openblox.io/lich-thi-dau" class="">Lá»CH THI ÄẤU</a></li><li class="nav__item"><a href="https://openblox.io/bang-xep-hang" class="">BẢNG XẾP HẠNG</a></li><li class="nav__item"><a href="https://openblox.io/ket-qua-bong-da" class="">KẾT QUẢ BÃNG ÄÃ</a></li><li class="nav__item"><a href="https://openblox.io/nhan-dinh" class="">NHẬN Äá»NH</a></li><li class="nav__item"><a href="https://openblox.io/tin-tuc" class="">TIN TỨC</a></li> </ul>
</nav>
<div class="header__buttons">
<a href="https://refvsbf.com/" target="_blank" class="btn btn--secondary header-button" rel="nofollow">
<span class="header-text">CƯỢC VSBET</span>
</a>
<a href="https://t.me/vsbet88888888888888888" rel="nofollow" target="_blank" class="btn btn--default header-button">
<span class="header-text">LIÃN Há» KM</span>
</a>
</div>
</div>
</div>
</div>
</header>
<!-- Main Content -->
<!-- Main Content -->
<main style="padding-top: 1px">
<!-- Hero Section -->
<section class="hero">
<div class="container">
<div class="hero__content">
<h1 class="text-uppercase">
Xoilac TV | Trá»±c Tiếp Bóng Äá HD - Link Xôi Lạc TV #1 Hôm Nay
</h1>
</div>
</div>
</section>
<!-- Sports Filter -->
<section class="sports-filter">
<div class="container">
<div class="sports-filter__inner" style="display: none">
<!-- Group 1: Sports Categories -->
<!--<div class="sports-filter__group sports-categories">
<button
class="sports-filter__button"
data-sport="all"
>
<div class="sports-filter__button-icon">
<img
src="https://cdn.openblox.io/wp-content/themes/cakhiatv/assets/images/icons/football.png"
alt="Tất Cả"
/>
</div>
<div class="sports-filter__button-text">Tất Cả</div>
<div class="sports-filter__button-count" id="count-all-type"></div>
</button>
<button
class="sports-filter__button"
data-sport="football"
>
<div class="sports-filter__button-icon">
<img
src="https://cdn.openblox.io/wp-content/themes/cakhiatv/assets/images/icons/football.png"
alt="Football"
/>
</div>
<div class="sports-filter__button-text">Bóng Äá</div>
<div class="sports-filter__button-count" id="count-football"></div>
</button>
<button class="sports-filter__button" data-sport="basketball">
<div class="sports-filter__button-icon">
<img
src="https://cdn.openblox.io/wp-content/themes/cakhiatv/assets/images/icons/basketball.png"
alt="Basketball"
/>
</div>
<div class="sports-filter__button-text">Bóng rá»</div>
<div class="sports-filter__button-count" id="count-basketball"></div>
</button>
<!-- <button class="sports-filter__button" data-sport="tennis">
<div class="sports-filter__button-icon">
<img src="https://cdn.openblox.io/wp-content/themes/cakhiatv/assets/images/icons/tennis.png" alt="Tennis" />
</div>
<div class="sports-filter__button-text">Tennis</div>
<div class="sports-filter__button-count" id="count-tennis"></div>
</button> -->
<!--<button class="sports-filter__button" data-sport="volleyball">
<div class="sports-filter__button-icon">
<img
src="https://cdn.openblox.io/wp-content/themes/cakhiatv/assets/images/icons/volleyball.png"
alt="Volleyball"
/>
</div>
<div class="sports-filter__button-text">Bóng chuyá»n</div>
<div class="sports-filter__button-count" id="count-volleyball"></div>
</button> -->
<div class="livescore-switch">
<label class="switch">
<input type="checkbox" id="livescoreToggle" />
<span class="slider"></span>
</label>
<span class="livescore-label">Livescore</span>
</div>
</div>
<!-- Divider -->
<div class="sports-filter__divider"></div>
<!-- Group 2: Match Filters -->
<div class="sports-filter__group match-filters">
<button class="sports-filter__button_child active" data-filter="child_all">
<div class="sports-filter__button-icon">
<img src="https://cdn.openblox.io/wp-content/themes/cakhiatv/assets/images/icons/all.png" alt="All" />
</div>
<div class="sports-filter__button-text">Tất cả</div>
<div class="sports-filter__button-count" id="count-all-type"></div>
</button>
<button class="sports-filter__button_child live" data-filter="live">
<div class="sports-filter__button-icon">
<img src="https://cdn.openblox.io/wp-content/themes/cakhiatv/assets/images/icons/live.png" alt="Live" />
</div>
<div class="sports-filter__button-text">Äang Live</div>
<div class="sports-filter__button-count" id="count-live"></div>
</button>
<button class="sports-filter__button_child" data-filter="hot">
<div class="sports-filter__button-icon">
<img src="https://cdn.openblox.io/wp-content/themes/cakhiatv/assets/images/icons/hot.png" alt="Hot" />
</div>
<div class="sports-filter__button-text">Tráºn HOT</div>
<div class="sports-filter__button-count" id="count-hot"></div>
</button>
<button class="sports-filter__button_child" data-filter="date" data-value="">
<div class="sports-filter__button-icon">
<img src="https://cdn.openblox.io/wp-content/themes/cakhiatv/assets/images/icons/calendar.png" alt="Today" />
</div>
<div class="sports-filter__button-text">Hôm Nay</div>
<div class="sports-filter__button-count" id="count-today"></div>
</button>
<button class="sports-filter__button_child" data-filter="date" data-value="">
<div class="sports-filter__button-icon">
<img
src="https://cdn.openblox.io/wp-content/themes/cakhiatv/assets/images/icons/calendar.png"
alt="Tomorrow"
/>
</div>
<div class="sports-filter__button-text">Ngà y Mai</div>
<div class="sports-filter__button-count" id="count-tomorrow"></div>
</button>
<!--<button class="sports-filter__button_child" data-filter="no_blv">
<div class="sports-filter__button-text">Live không BLV</div>
<div class="sports-filter__button-count" id="noblv-live">0</div>
</button>-->
</div>
</div>
</div>
</section>
<!-- Featured Matches -->
<section class="featured-matches">
<div class="container">
<div class="match-section">
<div id="match-list" class="matches">
</div>
</div>
<!--<div
style="
display: flex;
justify-content: center;
margin-top: 1rem;
margin-bottom: 1rem;
"
>
<a href="#" class="btn btn--readmore">
<span>Xem thêm lá»ch trá»±c tiếp -></span>
</a>
</div>-->
</div>
</section>
<!-- Content Navigation Section -->
<section class="content-nav">
<div class="container">
<div class="content-nav__container" style="max-height:800px !important">
<div class="content-nav__lists">
<div class="content-nav__list">
<!-- Nếu bạn vẫn muá»n giữ Mục lục nà y thá»§ công, thì Äá» lại -->
<p style="font-weight: bold; font-size: 120%">Mục Lục</p>
<!-- Hoặc có thá» xoá toà n bá» <ul> nà y nếu muá»n Gutenberg xá» lý luôn -->
<div class="content-nav__divider"></div>
<div class="content-nav__text">
<div id="ez-toc-container" class="ez-toc-v2_0_74 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title" style="cursor:inherit">Table of Contents</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="https://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="https://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#Gioi_thieu_ve_Xoilac_TV" >Giá»i thiá»u vá» Xoilac TV</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-2" href="#Xoilac_TV_la_gi" >Xoilac TV là gì?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-3" href="#Muc_tieu_ton_chi_cua_nen_tang" >Mục tiêu & tôn chá» cá»§a ná»n tảng</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-4" href="#Vi_sao_Xoilac_TV_tro_thanh_lua_chon_hang_dau_cua_nguoi_xem_Viet_Nam" >Vì sao Xoilac TV trá» thà nh lá»±a chá»n hà ng Äầu cá»§a ngưá»i xem Viá»t Nam?</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#Xem_mien_phi_moi_giai_dau_lon_nho" >Xem miá»
n phà má»i giải Äấu lá»n nhá»</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#Truyen_hinh_truc_tiep_bong_da_chat_luong_Full_HD" >Truyá»n hình trá»±c tiếp bóng Äá chất lượng Full HD</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-7" href="#Khong_giat_lag_%E2%80%93_Khong_quang_cao_che_man_hinh" >Không giáºt lag â Không quảng cáo che mà n hình</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="#Ho_tro_xem_tren_moi_thiet_bi_TV_PC_iPhone_Android" >Há» trợ xem trên má»i thiết bá»: TV, PC, iPhone, Android</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="#Server_livestream_sieu_nhanh_%E2%80%93_Khong_delay" >Server livestream siêu nhanh â Không delay</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-10" href="#Tu_dong_toi_uu_theo_toc_do_mang_hien_tai" >Tá»± Äá»ng tá»i ưu theo tá»c Äá» mạng hiá»n tại</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-11" href="#Danh_sach_cac_giai_dau_duoc_truc_tiep_tai_Xoilac_TV" >Danh sách các giải Äấu ÄÆ°á»£c trá»±c tiếp tại Xoilac TV</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#Cac_giai_dau_hang_dau_chau_Au" >Các giải Äấu hà ng Äầu châu Ãu</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#Cac_giai_dau_chau_A_Viet_Nam" >Các giải Äấu châu à & Viá»t Nam</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-14" href="#Cac_giai_dau_quoc_te" >Các giải Äấu quá»c tế</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-15" href="#Cac_giai_tre_giao_huu_quoc_te" >Các giải trẻ & giao hữu quá»c tế</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-16" href="#Cac_chuyen_muc_huu_ich_khac_tai_Xoilac_TV" >Các chuyên mục hữu Ãch khác tại Xoilac TV</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-17" href="#Lich_thi_dau_bong_da_hom_nay_%E2%80%93_Cap_nhat_nhanh_nhat" >Lá»ch thi Äấu bóng Äá hôm nay â Cáºp nháºt nhanh nhất</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-18" href="#Xem_ket_qua_bong_da_%E2%80%93_Tong_hop_day_du_theo_thoi_gian_thuc" >Xem kết quả bóng Äá â Tá»ng hợp Äầy Äá»§ theo thá»i gian thá»±c</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-19" href="#Bang_xep_hang_bong_da_%E2%80%93_Cap_nhat_lien_tuc" >Bảng xếp hạng bóng Äá â Cáºp nháºt liên tục</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-20" href="#Nhan_dinh_bong_da_%E2%80%93_Phan_tich_chuyen_sau_truoc_tran" >Nháºn Äá»nh bóng Äá â Phân tÃch chuyên sâu trưá»c tráºn</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-21" href="#Tin_tuc_bong_da_%E2%80%93_Cap_nhat_nong_hoi_moi_ngay" >Tin tức bóng Äá â Cáºp nháºt nóng há»i má»i ngà y</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-22" href="#Vi_sao_nen_chon_Xoilac_TV_thay_vi_cac_nen_tang_truc_tiep_bong_da_khac" >Vì sao nên chá»n Xoilac TV thay vì các ná»n tảng trá»±c tiếp bóng Äá khác?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-23" href="#He_thong_chong_lag_%E2%80%93_Cong_nghe_toi_uu_xem_bong_da" >Há» thá»ng chá»ng lag â Công nghá» tá»i ưu xem bóng Äá</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-24" href="#CDN_da_lop_%E2%80%93_Tu_dong_can_bang_tai" >CDN Äa lá»p â Tá»± Äá»ng cân bằng tải</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-25" href="#Toi_uu_duong_truyen_cho_nguoi_dung_Viet_Nam" >Tá»i ưu ÄÆ°á»ng truyá»n cho ngưá»i dùng Viá»t Nam</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-26" href="#Cong_nghe_nen_video_thong_minh" >Công nghá» nén video thông minh</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-27" href="#Ket_luan" >Kết luáºn</a></li></ul></nav></div>
<p>Bóng Äá ngà y cà ng trá» thà nh má»t phần không thá» thiếu trong Äá»i sá»ng tinh thần cá»§a ngưá»i Viá»t Nam. Nhu cầu theo dõi các giải Äấu lá»n nhá» vá»i chất lượng hình ảnh cao, ÄÆ°á»ng truyá»n á»n Äá»nh và khả nÄng truy cáºp linh hoạt Äang tÄng mạnh hÆ¡n bao giá» hết. </p>
<p>Trong bá»i cảnh nhiá»u ná»n tảng trá»±c tuyến vẫn tá»n tại hạn chế vá» bÄng thông, Äá» trá»
hay quảng cáo gây gián Äoạn, Xoilac TV xuất hiá»n như má»t giải pháp toà n diá»n, Äáp ứng Äầy Äá»§ những yêu cầu khắt khe cá»§a ngưá»i xem hiá»n Äại. Vá»i há» thá»ng công nghá» ÄÆ°á»£c Äầu tư bà i bản và khả nÄng cung cấp dữ liá»u phong phú, Xoilac TV không chá» là má»t website xem bóng Äá, mà còn là má»t trung tâm thông tin chuyên sâu dà nh cho ngưá»i hâm má» bóng Äá tại Viá»t Nam.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="400" src="https://bachdangco.com/wp-content/uploads/2025/11/image.png" alt="Giá»i thiá»u Xoilac TV" class="wp-image-3472" srcset="https://cdn.adminmypham.site/wp-content/uploads/2025/11/image.png 800w, https://cdn.adminmypham.site/wp-content/uploads/2025/11/image-300x150.png 300w, https://cdn.adminmypham.site/wp-content/uploads/2025/11/image-768x384.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="Gioi_thieu_ve_Xoilac_TV"></span><strong>Giá»i thiá»u vá» Xoilac TV</strong><span class="ez-toc-section-end"></span></h2>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xoilac_TV_la_gi"></span><strong>Xoilac TV là gì?</strong><span class="ez-toc-section-end"></span></h3>
<p><strong><a href="/">Xoilac</a></strong> TV là má»t ná»n tảng trá»±c tiếp bóng Äá trá»±c tuyến ÄÆ°á»£c phát triá»n nhằm Äáp ứng nhu cầu xem bóng Äá chất lượng cao cho khán giả tại Viá»t Nam. Trong bá»i cảnh nhu cầu theo dõi các giải Äấu ngà y cà ng tÄng, Äặc biá»t là Ngoại hạng Anh, Champions League hay các giải thuá»c há» thá»ng Äá»i tuyá»n quá»c gia, Xoilac TV ra Äá»i như má»t giải pháp tá»i ưu, mang Äến trải nghiá»m xem bóng Äá mượt mà , sắc nét và á»n Äá»nh.</p>
<p>Không chá» là má»t website cung cấp link xem bóng Äá, <strong><a href="/">Xoilac TV</a></strong> còn hoạt Äá»ng như má»t há» sinh thái bóng Äá toà n diá»n, bao gá»m lá»ch thi Äấu, kết quả, bảng xếp hạng, phân tÃch chuyên sâu và tin tức cáºp nháºt. Tất cả ÄÆ°á»£c thiết kế vá»i mục tiêu xây dá»±ng má»t ná»n tảng táºp trung cho ngưá»i hâm má» bóng Äá Viá»t Nam, nÆ¡i há» có thá» theo dõi má»i tráºn Äấu từ cấp CLB Äến cấp Äá»i tuyá»n.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Muc_tieu_ton_chi_cua_nen_tang"></span><strong>Mục tiêu & tôn chá» cá»§a ná»n tảng</strong><span class="ez-toc-section-end"></span></h3>
<p>Mục tiêu cá»§a Xoilac TV là cung cấp trải nghiá»m xem <strong><a href="/\">trá»±c tiếp bóng Äá</a></strong> <strong>á»n Äá»nh â chất lượng â miá»
n phÃ</strong>, hưá»ng tá»i tá»i ưu hóa khả nÄng tiếp cáºn cho má»i ngưá»i dùng, bất ká» thiết bá» hay bÄng thông mạng.</p>
<p>Các nguyên tắc hoạt Äá»ng chÃnh cá»§a Xoilac TV bao gá»m:</p>
<ul class="wp-block-list">
<li><strong>Chất lượng ÄÆ°á»ng truyá»n á»n Äá»nh:</strong> Táºp trung và o công nghá» CDN và cân bằng tải Äá» giảm Äá» trá»
.</li>
<li><strong>Tá»i ưu hóa trải nghiá»m ngưá»i dùng:</strong> Giao diá»n rõ rà ng, dá»
thao tác, há» trợ má»i thiết bá».</li>
<li><strong>Khả nÄng truy cáºp cao:</strong> Không yêu cầu ÄÄng ký hoặc chi phÃ.</li>
<li><strong>Cung cấp thông tin Äầy Äá»§:</strong> Há» trợ dữ liá»u tráºn Äấu, tin tức và phân tÃch chuyên sâu.</li>
</ul>
<p>Nhá» tuân thá»§ các tôn chá» nà y, Xoilac TV từng bưá»c xây dá»±ng vá» thế là má»t trong những ná»n tảng xem bóng Äá trá»±c tuyến hà ng Äầu tại Viá»t Nam.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="400" src="https://bachdangco.com/wp-content/uploads/2025/11/image-1.png" alt="Mục tiêu và sứ má»nh cá»§a Xoilac TV" class="wp-image-3473" srcset="https://cdn.adminmypham.site/wp-content/uploads/2025/11/image-1.png 800w, https://cdn.adminmypham.site/wp-content/uploads/2025/11/image-1-300x150.png 300w, https://cdn.adminmypham.site/wp-content/uploads/2025/11/image-1-768x384.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="Vi_sao_Xoilac_TV_tro_thanh_lua_chon_hang_dau_cua_nguoi_xem_Viet_Nam"></span><strong>Vì sao Xoilac TV trá» thà nh lá»±a chá»n hà ng Äầu cá»§a ngưá»i xem Viá»t Nam?</strong><span class="ez-toc-section-end"></span></h2>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xem_mien_phi_moi_giai_dau_lon_nho"></span><strong>Xem miá»
n phà má»i giải Äấu lá»n nhá»</strong><span class="ez-toc-section-end"></span></h3>
<p>Má»t trong những yếu tá» tạo nên sá»± phá» biến cá»§a Xoilac TV chÃnh là khả nÄng cung cấp ÄÆ°á»ng truyá»n trá»±c tiếp cá»§a hầu hết các giải Äấu lá»n nhá» hoà n toà n miá»
n phÃ. Ngưá»i dùng không phải trả bất kỳ chi phà nà o, không yêu cầu tà i khoản hay gói thuê bao â chá» cần truy cáºp và xem ngay.</p>
<p>Viá»c há» trợ miá»
n phà má»t sá» lượng lá»n giải Äấu giúp Xoilac TV trá» thà nh má»t trong những ná»n tảng ÄÆ°á»£c truy cáºp nhiá»u nhất và o cuá»i tuần, Äặc biá»t trong các khung giá» cao Äiá»m như Ngoại hạng Anh, La Liga hay Champions League.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Truyen_hinh_truc_tiep_bong_da_chat_luong_Full_HD"></span><strong>Truyá»n hình trá»±c tiếp bóng Äá chất lượng Full HD</strong><span class="ez-toc-section-end"></span></h3>
<p>Các luá»ng streaming Full HD cá»§a Xoilac TV ÄÆ°á»£c xá» lý qua há» thá»ng mã hóa hiá»n Äại, giúp:</p>
<ul class="wp-block-list">
<li>Giảm nhiá»
u hình</li>
<li>Tá»i ưu Äá» sáng â Äá» tương phản</li>
<li>Giữ Äá» á»n Äá»nh khi xem full mà n hình</li>
<li>TÄng tá»c tải khung hình cho các tráºn Äấu tá»c Äá» cao</li>
</ul>
<p>Xoilac TV ứng dụng công nghá» streaming Äa phân giải, cho phép ngưá»i dùng xem bóng Äá vá»i chất lượng từ 480p Äến 1080p tùy theo Äiá»u kiá»n bÄng thông. Há» thá»ng sẽ tá»± Äá»ng Äiá»u chá»nh Äá» tá»i ưu hình ảnh, Äảm bảo ngưá»i xem luôn nháºn ÄÆ°á»£c Äá» nét cao nhất có thá» mà vẫn giữ ÄÆ°á»£c sá»± á»n Äá»nh trong quá trình truyá»n tải. Nhá» cÆ¡ chế mã hóa video hiá»n Äại, hình ảnh thu ÄÆ°á»£c có Äá» sắc nét vượt trá»i, hạn chế nhiá»
u, tá»i ưu Äá» sáng và Äá» tương phản Äá» phù hợp vá»i từng loại mà n hình khác nhau.</p>
<p>Äiá»m mạnh cá»§a ná»n tảng nằm á» khả nÄng duy trì chất lượng khung hình cao ngay trong những pha bóng tá»c Äá», giúp giảm hiá»n tượng má» nhoè hoặc mất nét khi camera di chuyá»n nhanh. Khi xem full mà n hình, chất lượng hình ảnh vẫn ÄÆ°á»£c giữ nguyên mà không bá» bá» hình hoặc giảm Äá» chi tiết. Äiá»u nà y mang Äến cảm giác sá»ng Äá»ng, giúp ngưá»i xem như Äang trải nghiá»m tráºn Äấu trá»±c tiếp trên sân váºn Äá»ng.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="400" src="https://bachdangco.com/wp-content/uploads/2025/11/image-2.png" alt="Hình ảnh và âm thanh chất lượng cao" class="wp-image-3474" srcset="https://cdn.adminmypham.site/wp-content/uploads/2025/11/image-2.png 800w, https://cdn.adminmypham.site/wp-content/uploads/2025/11/image-2-300x150.png 300w, https://cdn.adminmypham.site/wp-content/uploads/2025/11/image-2-768x384.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Khong_giat_lag_%E2%80%93_Khong_quang_cao_che_man_hinh"></span><strong>Không giáºt lag â Không quảng cáo che mà n hình</strong><span class="ez-toc-section-end"></span></h3>
<p>Äiá»m khác biá»t lá»n giữa Xoilac TV và nhiá»u trang web xem bóng Äá miá»
n phà khác nằm á» viá»c ná»n tảng không hiá»n thá» quảng cáo che lên video. Nhá» Äó, mà n hình tráºn Äấu luôn ÄÆ°á»£c giữ trá»n vẹn, không bá» che khuất trong những tình huá»ng quan trá»ng. Viá»c loại bá» lá»p quảng cáo gây cản trá» giúp trải nghiá»m xem trá» nên liá»n mạch hÆ¡n rất nhiá»u, Äặc biá»t trong những tráºn Äấu có nhá»p Äá» cao.</p>
<p>Vá» mặt kỹ thuáºt, Xoilac TV xây dá»±ng há» thá»ng chá»ng lag dá»±a trên cÆ¡ chế kiá»m soát tải và tá»i ưu ÄÆ°á»ng truyá»n liên tục. Äiá»u nà y giúp hạn chế tình trạng tụt FPS, khá»±ng hình, suy giảm chất lượng hoặc nghẽn tÃn hiá»u và o những thá»i Äiá»m có lượng ngưá»i truy cáºp lá»n. Nhá» Äó, ngưá»i xem có thá» theo dõi tráºn Äấu má»t cách á»n Äá»nh, không bá» gián Äoạn bá»i những vấn Äá» thưá»ng gặp á» ná»n tảng khác.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="400" src="https://bachdangco.com/wp-content/uploads/2025/11/image-4.png" alt="Xoilac TV không quảng cáo khi xem bóng Äá" class="wp-image-3476" srcset="https://cdn.adminmypham.site/wp-content/uploads/2025/11/image-4.png 800w, https://cdn.adminmypham.site/wp-content/uploads/2025/11/image-4-300x150.png 300w, https://cdn.adminmypham.site/wp-content/uploads/2025/11/image-4-768x384.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Ho_tro_xem_tren_moi_thiet_bi_TV_PC_iPhone_Android"></span><strong>Há» trợ xem trên má»i thiết bá»: TV, PC, iPhone, Android</strong><span class="ez-toc-section-end"></span></h3>
<p>Xoilac TV há» trợ Äa thiết bá» dá»±a trên công nghá» hiá»n thá» responsive:</p>
<ul class="wp-block-list">
<li><strong>TV thông minh:</strong> Há» trợ trình duyá»t tivi Samsung, LG, Android TV.</li>
<li><strong>Laptop/PC:</strong> Tương thÃch Google Chrome, Firefox, Edge, Safari.</li>
<li><strong>Äiá»n thoại:</strong> Tá»i ưu Äặc biá»t cho iOS và Android Äá» giảm tải CPU và tiết kiá»m dữ liá»u.</li>
</ul>
<p>TÃnh Äa ná»n tảng cá»§a Xoilac TV ÄÆ°á»£c phát triá»n dá»±a trên công nghá» thiết kế giao diá»n responsive, cho phép website tá»± Äiá»u chá»nh Äá» phù hợp vá»i từng loại thiết bá». Khi xem trên TV thông minh, ngưá»i dùng vẫn có thá» trải nghiá»m hình ảnh Äá» nét cao vá»i giao diá»n rõ rà ng và dá»
Äiá»u khiá»n bằng remote. Trên laptop hoặc máy tÃnh bà n, ná»n tảng hoạt Äá»ng mượt mà trên các trình duyá»t phá» biến mà không yêu cầu cà i Äặt thêm phần má»m.</p>
<p>Äá»i vá»i Äiá»n thoại di Äá»ng, Xoilac TV ÄÆ°á»£c tá»i ưu hóa Äá» giảm tải tà i nguyên, Äảm bảo hiá»u nÄng á»n Äá»nh ngay cả trên thiết bá» cấu hình trung bình. Viá»c Äiá»u chá»nh kÃch thưá»c video, giảm tiêu hao pin và tiết kiá»m dữ liá»u di Äá»ng giúp ngưá»i dùng có thá» xem bóng Äá á» má»i nÆ¡i, má»i thá»i Äiá»m. Dù trên thiết bá» nà o, ná»n tảng Äá»u giữ ÄÆ°á»£c chất lượng hình ảnh và sá»± mượt mà khi xem trá»±c tiếp.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Server_livestream_sieu_nhanh_%E2%80%93_Khong_delay"></span><strong>Server livestream siêu nhanh â Không delay</strong><span class="ez-toc-section-end"></span></h3>
<p>Má»t trong những yếu tá» kỹ thuáºt quan trá»ng nhất cá»§a Xoilac TV là há» thá»ng server livestream ÄÆ°á»£c phân bá» tại nhiá»u khu vá»±c, giúp rút ngắn khoảng cách truyá»n tải và giảm tá»i Äa Äá» trá»
. Trong thá»±c tế, Äá» delay cá»§a Xoilac TV thưá»ng chá» nằm trong khoảng 5 Äến 15 giây â thấp hÆ¡n Äáng ká» so vá»i các website xem bóng Äá thông thưá»ng hoặc các ứng dụng OTT quá»c tế vá»n có thá» cháºm tá»i 30â60 giây.</p>
<p>Äá» trá»
trung bình:</p>
<ul class="wp-block-list">
<li>Website bóng Äá thông thưá»ng: 25â45 giây</li>
<li>Má»t sá» ná»n tảng OTT quá»c tế: 30â60 giây</li>
<li><strong>Xoilac TV: 5â15 giây</strong></li>
</ul>
<p>Sá»± vượt trá»i nà y là kết quả cá»§a cÆ¡ chế Äá»nh tuyến thông minh giúp tá»i ưu hưá»ng truyá»n dữ liá»u và giảm sá» lượng Äiá»m trung gian. Khi lượng ngưá»i xem tÄng Äá»t biến, há» thá»ng vẫn giữ ÄÆ°á»£c tá»c Äá» á»n Äá»nh nhá» khả nÄng phân bá» tải linh hoạt, Äảm bảo trải nghiá»m liá»n mạch ngay cả trong những tráºn cầu tâm Äiá»m thu hút hà ng trÄm nghìn ngưá»i truy cáºp cùng lúc.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Tu_dong_toi_uu_theo_toc_do_mang_hien_tai"></span><strong>Tá»± Äá»ng tá»i ưu theo tá»c Äá» mạng hiá»n tại</strong><span class="ez-toc-section-end"></span></h3>
<p>Xoilac TV sá» dụng thuáºt toán Adaptive Bitrate Streaming, má»t trong những công nghá» tiên tiến nhất trong lÄ©nh vá»±c truyá»n tải video trá»±c tuyến. Thuáºt toán nà y liên tục Äánh giá tá»c Äá» tải xuá»ng, Äá» á»n Äá»nh bÄng thông và tình trạng mất gói dữ liá»u Äá» quyết Äá»nh chất lượng phát phù hợp nhất cho ngưá»i dùng tại từng thá»i Äiá»m. TÃnh nÄng nà y tá»± Äánh giá:</p>
<p>Khi tá»c Äá» mạng không á»n Äá»nh, há» thá»ng láºp tức giảm Äá» phân giải xuá»ng mức phù hợp Äá» giữ hình ảnh mượt mà , không bá» Äứng hình hoặc giáºt lag. Ngược lại, khi bÄng thông mạnh trá» lại, chất lượng video sẽ tá»± Äá»ng tÄng lên 720p hoặc 1080p mà không cần bất kỳ thao tác nà o từ phÃa ngưá»i xem. Äiá»u nà y tạo nên má»t trải nghiá»m liá»n mạch, giúp ngưá»i dùng luôn cảm nháºn tráºn Äấu á» mức chất lượng tá»i ưu nhất mÃ ÄÆ°á»ng truyá»n cho phép.</p>
<p>Và dụ:</p>
<ul class="wp-block-list">
<li>Mạng yếu â tá»± Äá»ng chuyá»n 480p</li>
<li>Mạng á»n â 720p</li>
<li>Mạng mạnh â 1080p</li>
</ul>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="Danh_sach_cac_giai_dau_duoc_truc_tiep_tai_Xoilac_TV"></span><strong>Danh sách các giải Äấu ÄÆ°á»£c trá»±c tiếp tại Xoilac TV</strong><span class="ez-toc-section-end"></span></h2>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Cac_giai_dau_hang_dau_chau_Au"></span><strong>Các giải Äấu hà ng Äầu châu Ãu</strong><span class="ez-toc-section-end"></span></h3>
<p>Xoilac TV truyá»n tải Äầy Äá»§ các giải Äấu lá»n nhất châu Ãu vá»i chất lượng cao và cáºp nháºt liên tục:</p>
<ul class="wp-block-list">
<li><strong>Ngoại hạng Anh (Premier League):</strong> Giải Äấu ÄÆ°á»£c xem nhiá»u nhất tại Viá»t Nam.</li>
<li><strong>Champions League:</strong> Cung cấp các tráºn Äấu vòng bảng, vòng loại trá»±c tiếp và chung kết.</li>
<li><strong>Europa League / Europa Conference League:</strong> Phù hợp vá»i ngưá»i xem yêu thÃch bóng Äá chiến thuáºt.</li>
<li><strong>La Liga:</strong> NÆ¡i quy tụ kỹ thuáºt Äá»nh cao vá»i Barcelona, Real Madrid, Atletico.</li>
<li><strong>Serie A:</strong> Giải Äấu già u tÃnh chiến thuáºt cá»§a châu Ãu.</li>
<li><strong>Bundesliga:</strong> Tá»c Äá» cao, nhiá»u bà n thắng.</li>
<li><strong>Ligue 1:</strong> Theo dõi các Äá»i bóng lá»n như PSG, Marseille, Monaco.</li>
</ul>
<p>Má»i giải Äấu Äá»u ÄÆ°á»£c cáºp nháºt lá»ch thi Äấu, Äá»i hình, thông tin chuyên sâu ngay trưá»c tráºn.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Cac_giai_dau_chau_A_Viet_Nam"></span><strong>Các giải Äấu châu à & Viá»t Nam</strong><span class="ez-toc-section-end"></span></h3>
<ul class="wp-block-list">
<li><strong>V.League:</strong> Giải vô Äá»ch quá»c gia Viá»t Nam vá»i các CLB hà ng Äầu.</li>
<li><strong>Cúp Quá»c gia Viá»t Nam</strong></li>
<li><strong>U23 châu Ã:</strong> Các Äá»i tuyá»n trẻ, Äặc biá»t quan trá»ng vá»i ngưá»i hâm má» Viá»t Nam.</li>
<li><strong>AFC Champions League:</strong> Cup C1 châu à vá»i sá»± góp mặt cá»§a nhiá»u CLB mạnh.</li>
</ul>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Cac_giai_dau_quoc_te"></span><strong>Các giải Äấu quá»c tế</strong><span class="ez-toc-section-end"></span></h3>
<p>Xoilac TV phát trá»±c tiếp toà n bá» các giải lá»n cấp Äá»i tuyá»n:</p>
<ul class="wp-block-list">
<li><strong>World Cup</strong></li>
<li><strong>Euro</strong></li>
<li><strong>Copa America</strong></li>
<li><strong>Asian Cup</strong></li>
<li><strong>SEA Games â AFF Cup</strong></li>
</ul>
<p>Các giải nà y luôn thu hút lượng truy cáºp khá»ng lá», nên Xoilac TV sá» dụng server riêng Äá» Äảm bảo trải nghiá»m.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Cac_giai_tre_giao_huu_quoc_te"></span><strong>Các giải trẻ & giao hữu quá»c tế</strong><span class="ez-toc-section-end"></span></h3>
<p>Bao gá»m:</p>
<ul class="wp-block-list">
<li>U17, U19, U21</li>
<li>Tráºn giao hữu CLB</li>
<li>Giao hữu Äá»i tuyá»n quá»c gia</li>
</ul>
<p>Những tráºn Äấu nà y thưá»ng khó tìm link xem, nhưng Xoilac TV vẫn cá» gắng cung cấp Äầy Äá»§.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="Cac_chuyen_muc_huu_ich_khac_tai_Xoilac_TV"></span><strong>Các chuyên mục hữu Ãch khác tại Xoilac TV</strong><span class="ez-toc-section-end"></span></h2>
<p>Ngoà i trá»±c tiếp bóng Äá, Xoilac TV phát triá»n thêm nhiá»u chuyên mục há» trợ:</p>
<ul class="wp-block-list">
<li><strong>Lá»ch thi Äấu:</strong> Cáºp nháºt theo ngà y, theo giải Äấu.</li>
<li><strong>Kết quả:</strong> Có thá»ng kê bà n thắng, thẻ phạt, kiá»m soát bóng.</li>
<li><strong>Bảng xếp hạng:</strong> BXH chi tiết theo từng giải.</li>
<li><strong>Nháºn Äá»nh:</strong> Phân tÃch từ chuyên gia, phong Äá», Äá»i Äầu.</li>
<li><strong>Tin tức:</strong> Thá» trưá»ng chuyá»n nhượng, Äá»i tuyá»n Viá»t Nam, chấn thươngâ¦</li>
</ul>
<p>Há» sinh thái thông tin giúp ngưá»i xem không cần truy cáºp nhiá»u website khác.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Lich_thi_dau_bong_da_hom_nay_%E2%80%93_Cap_nhat_nhanh_nhat"></span><strong>Lá»ch thi Äấu bóng Äá hôm nay â Cáºp nháºt nhanh nhất</strong><span class="ez-toc-section-end"></span></h3>
<p>Lá»ch thi Äấu trên Xoilac TV ÄÆ°á»£c cáºp nháºt theo thá»i gian thá»±c nhá» há» thá»ng Äá»ng bá» hóa dữ liá»u toà n cầu, Äảm bảo ngưá»i xem luôn tiếp cáºn Äúng và Äá»§ thông tin cho má»i tráºn Äấu. Thông tin vá» giá» thi Äấu ÄÆ°á»£c quy Äá»i sang giá» Viá»t Nam nhằm tạo sá»± thuáºn tiá»n cho ngưá»i dùng. Vá»i khả nÄng phân loại theo giải Äấu, ngưá»i xem có thá» nhanh chóng tìm tráºn Äấu mình quan tâm mà không cần phải kéo qua quá nhiá»u dữ liá»u.</p>
<p>Không chá» hiá»n thá» thá»i gian thi Äấu, Xoilac TV còn bá» sung các dữ liá»u bá» trợ quan trá»ng như Äá»a Äiá»m thi Äấu, tá» trá»ng tà i, Äá»i hình dá»± kiến và tình hình lá»±c lượng. Äây là những yếu tá» có ảnh hưá»ng lá»n Äến kết quả cá»§a má»t tráºn Äấu, Äặc biá»t hữu Ãch cho ngưá»i có nhu cầu phân tÃch trưá»c tráºn hoặc theo dõi sâu vá» mặt chuyên môn. Má»i khi có thay Äá»i vá» lá»ch thi Äấu, ná»n tảng sẽ cáºp nháºt ngay láºp tức Äá» Äảm bảo tÃnh chÃnh xác.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xem_ket_qua_bong_da_%E2%80%93_Tong_hop_day_du_theo_thoi_gian_thuc"></span><strong>Xem kết quả bóng Äá â Tá»ng hợp Äầy Äá»§ theo thá»i gian thá»±c</strong><span class="ez-toc-section-end"></span></h3>
<p>Há» thá»ng kết quả cá»§a Xoilac TV ÄÆ°á»£c thiết kế Äá» mang lại cái nhìn nhanh và Äầy Äá»§ vá» diá»
n biến tráºn Äấu ngay khi tráºn Äấu kết thúc â và tháºm chà là cáºp nháºt trong thá»i gian thá»±c vá»i những tráºn Äấu Äang diá»
n ra. Tất cả thông tin quan trá»ng như bà n thắng, ngưá»i ghi bà n, phút ghi bà n, thẻ và ng, thẻ Äá», thay ngưá»i hay tình huá»ng VAR Äá»u ÄÆ°á»£c hiá»n thá» rõ rà ng.</p>
<p>Äiá»m ná»i báºt cá»§a há» thá»ng nà y nằm á» khả nÄng cung cấp các thá»ng kê chuyên sâu như sá» lần dứt Äiá»m, tá»· lá» kiá»m soát bóng, sá» cÆ¡ há»i nguy hiá»m và hiá»u suất tấn công/phòng thá»§. Äây là những chá» sá» giúp ngưá»i xem hiá»u sâu hÆ¡n vá» chiến thuáºt cá»§a hai Äá»i, thay vì chá» dá»±a trên tá» sá» chung cuá»c. Kết quả cá»§a tất cả các giải Äấu lá»n nhá» Äá»u ÄÆ°á»£c tá»ng hợp, giúp ngưá»i hâm má» dá»
dà ng theo dõi lá»ch sá» thi Äấu cá»§a Äá»i bóng mình yêu thÃch.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Bang_xep_hang_bong_da_%E2%80%93_Cap_nhat_lien_tuc"></span><strong>Bảng xếp hạng bóng Äá â Cáºp nháºt liên tục</strong><span class="ez-toc-section-end"></span></h3>
<p>Bảng xếp hạng cá»§a Xoilac TV Äóng vai trò như má»t báo cáo tá»ng hợp tình hình cá»§a từng Äá»i qua từng vòng Äấu. Ngay sau khi tráºn Äấu kết thúc, há» thá»ng sẽ tá»± Äá»ng tÃnh toán Äiá»m sá», cáºp nháºt hiá»u sá» bà n thắng bại, sá» tráºn thắng â hòa â thua và phong Äá» gần nhất cá»§a các Äá»i.</p>
<p>Nhá» cÆ¡ chế cáºp nháºt nhanh và chÃnh xác, BXH tại Xoilac TV luôn phản ánh trung thá»±c cục diá»n cá»§a từng giải Äấu. Äá»i vá»i ngưá»i hâm má» Ngoại hạng Anh, La Liga hay V.League, viá»c theo dõi bảng xếp hạng Äóng vai trò quan trá»ng Äá» Äánh giá cÆ¡ há»i vô Äá»ch, suất dá»± cúp châu Ãu hoặc nguy cÆ¡ xuá»ng hạng. Giao diá»n bảng xếp hạng ÄÆ°á»£c thiết kế gá»n gà ng, dá»
Äá»c và tá»i ưu cho cả máy tÃnh lẫn di Äá»ng.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="400" src="https://bachdangco.com/wp-content/uploads/2025/11/image-5.png" alt="Chuyên mục Bảng Xếp Hạng" class="wp-image-3477" srcset="https://cdn.adminmypham.site/wp-content/uploads/2025/11/image-5.png 800w, https://cdn.adminmypham.site/wp-content/uploads/2025/11/image-5-300x150.png 300w, https://cdn.adminmypham.site/wp-content/uploads/2025/11/image-5-768x384.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Nhan_dinh_bong_da_%E2%80%93_Phan_tich_chuyen_sau_truoc_tran"></span><strong>Nháºn Äá»nh bóng Äá â Phân tÃch chuyên sâu trưá»c tráºn</strong><span class="ez-toc-section-end"></span></h3>
<p>CChuyên mục nháºn Äá»nh tại Xoilac TV mang Äáºm tÃnh chuyên môn khi kết hợp dữ liá»u thá»ng kê vá»i phân tÃch chiến thuáºt Äá» ÄÆ°a ra Äánh giá khách quan cho từng tráºn Äấu. Má»i bà i nháºn Äá»nh Äá»u ÄÆ°á»£c xây dá»±ng dá»±a trên phong Äá» 5â10 tráºn gần nhất, lá»ch sá» Äá»i Äầu, tình trạng lá»±c lượng, chiến thuáºt dá»± kiến và những yếu tá» có thỠảnh hưá»ng trá»±c tiếp Äến kết quả tráºn Äấu.</p>
<p>Các chuyên gia bình luáºn sẽ phân tÃch sâu vá» cách váºn hà nh lá»i chÆ¡i, hiá»u suất tấn công/phòng ngá»± cá»§a hai Äá»i, khả nÄng táºn dụng cÆ¡ há»i hay mức Äá» á»n Äá»nh cá»§a hà ng phòng thá»§. Ngưá»i xem từ Äó có thá» hiá»u rõ bá»i cảnh tráºn Äấu thay vì chá» xem những dá»± Äoán ÄÆ¡n giản như tá» sá» hoặc Äá»i mạnh â Äá»i yếu. ChÃnh sá»± chuyên sâu nà y giúp mục nháºn Äá»nh cá»§a Xoilac TV trá» thà nh má»t trong những phần ÄÆ°á»£c ngưá»i xem quan tâm nhiá»u nhất.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Tin_tuc_bong_da_%E2%80%93_Cap_nhat_nong_hoi_moi_ngay"></span><strong>Tin tức bóng Äá â Cáºp nháºt nóng há»i má»i ngà y</strong><span class="ez-toc-section-end"></span></h3>
<p>Chuyên mục tin tức cá»§a Xoilac TV Äảm nháºn vai trò mang Äến những thông tin má»i nhất trong là ng bóng Äá, từ châu Ãu cho Äến Viá»t Nam. Các bà i viết ÄÆ°á»£c cáºp nháºt liên tục vá» chuyá»n nhượng, Äá»i tuyá»n quá»c gia, thông tin CLB, lá»ch táºp luyá»n, tình hình chấn thương hay cả những sá»± kiá»n háºu trưá»ng Äáng chú ý.</p>
<p>Nguá»n tin ÄÆ°á»£c chá»n lá»c từ những há» thá»ng báo cáo quá»c tế Äáng tin cáºy, kết hợp vá»i sá»± tá»ng hợp chuyên nghiá»p từ Äá»i ngÅ© biên táºp. Äiá»u nà y giúp tin tức tại Xoilac TV luôn có Äá» chÃnh xác cao, tránh lan truyá»n thông tin thiếu kiá»m chứng. Vá»i tần suất cáºp nháºt Äá»u Äặn, ngưá»i xem luôn nắm bắt ÄÆ°á»£c những diá»
n biến má»i nhất trong giá»i bóng Äá.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="Vi_sao_nen_chon_Xoilac_TV_thay_vi_cac_nen_tang_truc_tiep_bong_da_khac"></span><strong>Vì sao nên chá»n Xoilac TV thay vì các ná»n tảng trá»±c tiếp bóng Äá khác?</strong><span class="ez-toc-section-end"></span></h2>
<p>Dưá»i Äây là bảng so sánh giữa Xoilac TV và má»t sá» ná»n tảng phá» biến:</p>
<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Tiêu chÃ</th><th>Xoilac TV</th><th>CakhiaTV</th><th>Socolive</th><th>GavangTV</th><th>ThapCamTV</th><th>VeboTV</th></tr></thead><tbody><tr><td>Miá»
n phÃ</td><td>â</td><td>â</td><td>â</td><td>â</td><td>â</td><td>â</td></tr><tr><td>Không quảng cáo che video</td><td>â</td><td>â</td><td>â</td><td>â</td><td>â</td><td>â</td></tr><tr><td>Äá» trá»
thấp</td><td>â 5â15s</td><td>20â40s</td><td>25â45s</td><td>25â45s</td><td>20â40s</td><td>20â35s</td></tr><tr><td>Há» trợ Full HD</td><td>â</td><td>â</td><td>â</td><td>â</td><td>â</td><td>â</td></tr><tr><td>á»n Äá»nh server</td><td>Rất cao</td><td>Trung bình</td><td>Trung bình</td><td>Trung bình</td><td>Khá</td><td>Trung bình</td></tr><tr><td>Giải Äấu phong phú</td><td>Rất phong phú</td><td>Phong phú</td><td>Khá</td><td>Khá</td><td>Khá</td><td>Trung bình</td></tr><tr><td>Há» trợ Äa thiết bá»</td><td>â</td><td>â</td><td>â</td><td>â</td><td>â</td><td>â</td></tr><tr><td>Công nghá» chá»ng lag</td><td>Mạnh</td><td>Khá</td><td>Khá</td><td>Trung bình</td><td>Trung bình</td><td>Khá</td></tr></tbody></table></figure>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="He_thong_chong_lag_%E2%80%93_Cong_nghe_toi_uu_xem_bong_da"></span><strong>Há» thá»ng chá»ng lag â Công nghá» tá»i ưu xem bóng Äá</strong><span class="ez-toc-section-end"></span></h2>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="CDN_da_lop_%E2%80%93_Tu_dong_can_bang_tai"></span><strong>CDN Äa lá»p â Tá»± Äá»ng cân bằng tải</strong><span class="ez-toc-section-end"></span></h3>
<p>Xoilac TV sá» dụng công nghá» CDN Äa lá»p vá»i khả nÄng Äá»nh tuyến thông minh, giúp:</p>
<ul class="wp-block-list">
<li>Giảm tải server trung tâm</li>
<li>Tá»i ưu tá»c Äá» tải dữ liá»u</li>
<li>Äảm bảo ÄÆ°á»ng truyá»n á»n Äá»nh trong giá» cao Äiá»m</li>
</ul>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Toi_uu_duong_truyen_cho_nguoi_dung_Viet_Nam"></span><strong>Tá»i ưu ÄÆ°á»ng truyá»n cho ngưá»i dùng Viá»t Nam</strong><span class="ez-toc-section-end"></span></h3>
<p>Há» thá»ng CDN Äặt tại nhiá»u khu vá»±c châu Ã, Äặc biá»t tá»i ưu tuyến truyá»n từ:</p>
<ul class="wp-block-list">
<li>Singapore</li>
<li>Hong Kong</li>
<li>Tokyo</li>
</ul>
<p>Nhá» Äó, Äá» trá»
ÄÆ°á»£c rút ngắn tá»i Äa.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Cong_nghe_nen_video_thong_minh"></span><strong>Công nghỠnén video thông minh</strong><span class="ez-toc-section-end"></span></h3>
<p>Ná»n tảng sá» dụng bá» mã hóa video tá»i ưu (H.264/H.265), giúp:</p>
<ul class="wp-block-list">
<li>Giảm dung lượng video</li>
<li>TÄng Äá» mượt</li>
<li>Hạn chế vỡ hình khi mạng yếu</li>
</ul>
<p>Công nghá» nén má»i giúp giảm tá»i 30â45% mức tiêu thụ dữ liá»u so vá»i chuẩn cÅ©.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="Ket_luan"></span><strong>Kết luáºn</strong><span class="ez-toc-section-end"></span></h2>
<p>Xoilac TV là má»t ná»n tảng trá»±c tiếp bóng Äá ÄÆ°á»£c thiết kế và tá»i ưu dá»±a trên nhu cầu thá»±c tế cá»§a ngưá»i hâm má» Viá»t Nam. Vá»i há» thá»ng server mạnh mẽ, các công nghá» truyá»n dẫn hiá»n Äại, khả nÄng chá»ng lag và chất lượng hình ảnh Full HD á»n Äá»nh, Xoilac TV mang Äến trải nghiá»m xem bóng Äá trá»±c tuyến vượt trá»i so vá»i nhiá»u website cùng lÄ©nh vá»±c.</p>
<p>Không chá» phát sóng trá»±c tiếp, ná»n tảng còn cung cấp há» sinh thái thông tin toà n diá»n: lá»ch thi Äấu, kết quả, bảng xếp hạng, tin tức và nháºn Äá»nh chuyên sâu. Nhá» váºy, Xoilac TV không chá» là nÆ¡i xem bóng Äá, mà còn là âtrung tâm dữ liá»u bóng Äáâ dà nh cho má»i ngưá»i hâm má».</p>
<p>Nếu bạn Äang tìm kiếm má»t ná»n tảng xem bóng Äá online <strong>mượt â nhanh â á»n Äá»nh â miá»
n phÃ</strong>, Xoilac TV chắc chắn là lá»±a chá»n hà ng Äầu.</p>
</div>
</div>
</div>
</div>
</div>
</section>
</main>
<!-- Footer -->
<!-- <footer class="footer">
<div class="container">
<div class="footer__content">
<p style="font-size: 14px">
Bản quyá»n bá»i
<a href="#"><span class="text-primary">CakhiaTV</span></a> - All
rights reserved
</p>
</div>
</div>
</footer> -->
<footer style="background-color: #111; color: #fff; text-align: center;">
<div style="width: 100%; max-width: 1280px; margin: 0 auto; padding: 20px 30px">
<div class="footer-logo">
<img src="/wp-content/uploads/2025/07/logo_xoilactv.png" alt="Xoilac TV" style="vertical-align: middle; height: 40px;">
</div>
<p class="footer-descript">
<a href="/"><strong style="color: #2FB925;">Xoilac</strong></a> TV - Xôi Lạc TV trá»±c tiếp bóng Äá miá»
n phà Ỡcác giải Äấu hà ng Äầu thế giá»i (Ngoại Hạng Anh, Cúp C1, La Liga, Bundesliga,...). Xôi Lạc cung cấp link xem bóng Äá trá»±c tuyến không giáºt lag và Äa dạng link dá»± phòng cùng Äá»i ngÅ© BLV chuyên môn cao
</p>
<nav style="margin: 20px 0;">
<a href="/gioi-thieu" class="footer-nav-text" style="color: #2FB925; margin: 0 10px; font-weight: bold;">Vá» CHÃNG TÃI</a>
<a href="/chinh-sach-bao-mat"class="footer-nav-text" style="color: #2FB925; margin: 0 10px; font-weight: bold;">CHÃNH SÃCH</a>
<a href="/dieu-khoan-su-dung"class="footer-nav-text" style="color: #2FB925; margin: 0 10px; font-weight: bold;">ÄIá»U KHOẢN</a>
<a href="/lien-he"class="footer-nav-text" style="color: #2FB925; margin: 0 10px; font-weight: bold;">LIÃN Há»</a>
<a href="/ban-quyen"class="footer-nav-text" style="color: #2FB925; margin: 0 10px; font-weight: bold;">BẢN QUYá»N</a>
<a href="/mien-tru-trach-nhiem"class="footer-nav-text" style="color: #2FB925; margin: 0 10px; font-weight: bold;">MIá»N TRỪ TRÃCH NHIá»M</a>
<a href="#"class="footer-nav-text" style="color: #2FB925; margin: 0 10px; font-weight: bold;">TUYá»N DỤNG</a>
<a href="#"class="footer-nav-text" style="color: #2FB925; margin: 0 10px; font-weight: bold;">SITEMAP</a>
</nav>
<p class="footer-text">Doanh nghiá»p: Xoilac TV</p>
<p class="footer-text">Chá»u trách nhiá»m ná»i dung: <a href="/author/vuongtrieuvu"><span style="color: #2FB925;">Vương Triá»u VÅ©</span></a></p>
<p class="footer-text">Sá» Äiá»n thoại: 0904236781</p>
<p class="footer-text">Email: [email protected]</p>
<p class="footer-text">Äá»a chá»: <a href="https://maps.app.goo.gl/hirxB8KhNpGFRRPa9" target="_blank" rel="nofollow"><span style="color: #2FB925;">45 Hà ng Bạc, Phưá»ng Hà ng Bạc, Quáºn Hoà n Kiếm, Hà Ná»i, Viá»t Nam</span></a></p>
<p class="footer-text">Hoạt Äá»ng: 00:00â23:59 (hằng ngà y)</p>
<p style="margin-top: 15px;">Hashtag: #xoilac #xoilactv #tructiepbongda #xembongdatructiep #xembongdatructuyen</p>
<div style="margin-top: 15px;">
<a href="#"><img src="https://cdn.openblox.io/wp-content/wp-content/uploads/2025/06/icon-facebook.webp" alt="Facebook" style="width: 24px; margin: 0 5px;"></a>
<a href="#" rel="nofollow" target="_blank"><img src="https://cdn.openblox.io/wp-content/wp-content/uploads/2025/06/4.png" alt="Twitter" style="width: 24px; margin: 0 5px;"></a>
<a href="#" rel="nofollow" target="_blank"><img src="https://cdn.openblox.io/wp-content/wp-content/uploads/2025/06/pngimg.com-twitch_PNG28.png" alt="Twitch" style="width: 24px; margin: 0 5px;"></a>
<a href="#" rel="nofollow" target="_blank"><img src="https://cdn.openblox.io/wp-content/wp-content/uploads/2025/06/Youtube_logo.png" alt="Youtube" style="width: 24px; margin: 0 5px;"></a>
<a href="#" rel="nofollow" target="_blank"><img src="https://cdn.openblox.io/wp-content/wp-content/uploads/2025/06/reddit-logo-1.png" alt="Reddit" style="width: 24px; margin: 0 5px;"></a>
<a href="#" rel="nofollow" target="_blank"><img src="https://cdn.openblox.io/wp-content/wp-content/uploads/2025/06/pngimg.com-pinterest_PNG63.png" alt="Pinterest" style="width: 24px; margin: 0 5px;"></a>
<a href="#" rel="nofollow" target="_blank"><img src="https://cdn.openblox.io/wp-content/wp-content/uploads/2025/06/free-tumblr-logo-icon-2434-thumb.png" alt="Tumblr" style="width: 24px; margin: 0 5px;"></a>
</div>
</div>
<a href="//www.dmca.com/Protection/Status.aspx?ID=b03a051e-fc2a-4ffb-ab78-7b2110c8201b" title="DMCA.com Protection Status" class="dmca-badge"> <img src ="https://images.dmca.com/Badges/_dmca_premi_badge_4.png?ID=b03a051e-fc2a-4ffb-ab78-7b2110c8201b" alt="DMCA.com Protection Status" /></a> <script src="https://images.dmca.com/Badges/DMCABadgeHelper.min.js"> </script>
</footer>
<button onclick="scrollToTop()" id="scrollTopBtn" title="Go to top">
<svg viewBox="0 0 24 24">
<path
d="M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z"
></path>
</svg>
</button>
<script src="https://cdn.openblox.io/wp-content/themes/cakhiatv/assets/js/main.js"></script>
</body>
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', function () {
navigator.serviceWorker.register('/sw.js')
.then(function (reg) { /*console.log('[SW] â
Registered, scope:', reg.scope);*/ })
.catch(function (err) { /*console.warn('[SW] Registration failed:', err);*/ });
});
}
</script>
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wp-*.php","\/wp-admin\/*","\/wp-content\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/cakhiatv\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script src="https://openblox.io/js/websocket-client.js"></script>
<style>
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.loading-spinner {
animation: spin 1s linear infinite;
}
#match-list {
position: relative;
}
#match-list>div[style*="display: flex"] {
width: 100% !important;
max-width: 100% !important;
}
</style>
<script>
// âââ LocalStorage Cache (giá»ng colatv40.live) ââââââââââââââââ
const LS_MATCHES_KEY = 'colatv_matches_v1';
const LS_MATCHES_TTL = 10 * 60 * 1000; // 10 phút
function loadMatchesFromCache() {
try {
const raw = localStorage.getItem(LS_MATCHES_KEY);
if (!raw) return null;
const { data, ts } = JSON.parse(raw);
if (!data || !Array.isArray(data) || data.length === 0) return null;
if (Date.now() - ts > LS_MATCHES_TTL) return null;
return data;
} catch { return null; }
}
function saveMatchesToCache(matches) {
try {
if (!matches || matches.length === 0) return;
localStorage.setItem(LS_MATCHES_KEY, JSON.stringify({ data: matches, ts: Date.now() }));
} catch { /* localStorage full, bá» qua */ }
}
// âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
// Tá»i ưu: Cache DOM selectors Äá» tránh query lại
const filterCountCache = {
countAllType: null,
countAll: null,
countElements: {},
noBlvElement: null,
liveElement: null,
hotElement: null,
todayElement: null,
tomorrowElement: null,
initialized: false
};
function initFilterCountCache() {
if (filterCountCache.initialized) return;
filterCountCache.countAllType = document.getElementById('count-all-type');
filterCountCache.countAll = document.getElementById('count-all');
filterCountCache.noBlvElement = document.getElementById('noblv-live');
filterCountCache.liveElement = document.getElementById('count-live');
filterCountCache.hotElement = document.getElementById('count-hot');
filterCountCache.todayElement = document.getElementById('count-today');
filterCountCache.tomorrowElement = document.getElementById('count-tomorrow');
['football', 'basketball', 'tennis', 'volleyball'].forEach(sport => {
filterCountCache.countElements[sport] = document.getElementById(`count-${sport}`);
});
filterCountCache.initialized = true;
}
// Hà m Äếm sá» lượng tráºn Äấu theo bá» lá»c - Tá»i ưu vá»i cached selectors
function updateFilterCounts(visibleMatchCards, allMatchCards) {
initFilterCountCache();
if (filterCountCache.countAllType) {
filterCountCache.countAllType.textContent = allMatchCards.length;
}
if (filterCountCache.countAll) {
filterCountCache.countAll.textContent = visibleMatchCards.length;
}
['football', 'basketball', 'tennis', 'volleyball'].forEach(sport => {
const countElement = filterCountCache.countElements[sport];
if (countElement) {
const count = Array.from(allMatchCards).filter(card => card.dataset.sport === sport).length;
countElement.textContent = count;
}
});
if (filterCountCache.noBlvElement) {
const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length;
filterCountCache.noBlvElement.textContent = noBlvCount;
}
if (filterCountCache.liveElement) {
const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length;
const liveCount = Array.from(visibleMatchCards).filter(card => card.dataset.live === 'true').length - noBlvCount;
filterCountCache.liveElement.textContent = liveCount;
}
if (filterCountCache.hotElement) {
const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length;
const hotCount = Array.from(visibleMatchCards).filter(card => card.dataset.hot === 'true').length - noBlvCount;
filterCountCache.hotElement.textContent = hotCount;
}
const today = new Date().toISOString().split('T')[0];
const tomorrow = new Date(Date.now() + 86400000).toISOString().split('T')[0];
if (filterCountCache.todayElement) {
const todayCount = Array.from(visibleMatchCards).filter(card => card.dataset.date === today).length;
filterCountCache.todayElement.textContent = todayCount;
}
if (filterCountCache.tomorrowElement) {
const tomorrowCount = Array.from(visibleMatchCards).filter(card => card.dataset.date === tomorrow).length;
filterCountCache.tomorrowElement.textContent = tomorrowCount;
}
}
// Hà m chuyá»n Äá»i ID môn thá» thao thà nh tên
function sportName(sportId) {
const sports = {
1: 'football',
2: 'basketball',
};
return sports[sportId] || 'unknown';
}
// Hà m xỠlý timestamp
function fixtime(timestamp) {
return isNaN(timestamp) ? new Date(timestamp).getTime() : timestamp;
}
// Hà m Äá»nh dạng ngà y giá»
function formatDate(timestamp, format) {
const date = new Date(timestamp * 1000);
const day = String(date.getDate()).padStart(2, '0');
const month = String(date.getMonth() + 1).padStart(2, '0');
const year = date.getFullYear();
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
if (format === 'd/m') return `${day}/${month}`;
if (format === 'Y-m-d') return `${year}-${month}-${day}`;
if (format === 'H:i') return `${hours}:${minutes}`;
return date;
}
// Hà m lấy domain API random Äá» tránh Cloudflare rate limit
function getApiDomain() {
const domains = ['api.gvapi.cc'];
// Random chá»n má»t domain
const index = Math.floor(Math.random() * domains.length);
const selected = domains[index];
return 'https://' + selected;
}
// Hà m lấy domain API random cho video-home (pinned-home)
function getVideoHomeApiDomain() {
const domains = ['video-home.gvapi.cc'];
// Random chá»n má»t domain
const index = Math.floor(Math.random() * domains.length);
const selected = domains[index];
return 'https://' + selected;
}
// Hà m hiá»n thá» loading
function showLoading() {
const matchList = getMatchList();
if (!matchList) return;
// Hiá»n thá» trá»±c tiếp trong match-list, thay thế toà n bá» ná»i dung
matchList.innerHTML = `
<div style="text-align: center; padding: 60px 20px; width: 100%; min-height: 400px; display: flex; flex-direction: column; justify-content: center; align-items: center; box-sizing: border-box;">
<div class="loading-spinner" style="display: block; width: 50px; height: 50px; border: 4px solid #f3f3f3; border-top: 4px solid #3498db; border-radius: 50%; animation: spin 1s linear infinite; margin: 0 auto;"></div>
<p style="margin-top: 20px; color: #666; font-size: 16px; text-align: center; width: 100%;">Äang tải dữ liá»u...</p>
</div>
`;
}
// Hà m hiá»n thá» lá»i vá»i các button Äá» xuất
function showErrorWithSuggestions() {
const matchList = getMatchList();
if (!matchList) return;
const suggestionLinks = [
{ name: 'iotditr.com', url: 'https://iotditr.com' },
{ name: 'cntsiend.com', url: 'https://cntsiend.com' },
{ name: 'euwygrb.com', url: 'https://euwygrb.com' },
{ name: 'ppoemlg.com', url: 'https://ppoemlg.com' },
{ name: 'eyhtldu.com', url: 'https://eyhtldu.com' }
];
const buttonsHtml = suggestionLinks.map(link =>
`<a href="${link.url}" target="_blank" rel="nofollow" style="display: inline-block; margin: 8px; padding: 12px 24px; background-color: #3498db; color: white; text-decoration: none; border-radius: 5px; font-weight: bold; transition: background-color 0.3s; cursor: pointer;">${link.name}</a>`
).join('');
// Hiá»n thá» trá»±c tiếp trong match-list, thay thế toà n bá» ná»i dung
matchList.innerHTML = `
<div style="text-align: center; padding: 60px 20px; width: 100%; min-height: 400px; display: flex; flex-direction: column; justify-content: center; align-items: center;">
<div style="margin-bottom: 20px;">
<svg width="64" height="64" viewBox="0 0 24 24" fill="none" stroke="#e74c3c" stroke-width="2" style="margin: 0 auto; display: block;">
<circle cx="12" cy="12" r="10"></circle>
<line x1="12" y1="8" x2="12" y2="12"></line>
<line x1="12" y1="16" x2="12.01" y2="16"></line>
</svg>
</div>
<h3 style="color: #e74c3c; margin-bottom: 15px; font-size: 24px; font-weight: bold;">Há» thá»ng gặp sá»± cá»</h3>
<p style="color: #666; margin-bottom: 30px; font-size: 16px; max-width: 500px;">Bạn có thá» chá»n kênh khác:</p>
<div style="display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; width: 100%; max-width: 800px;">
${buttonsHtml}
</div>
</div>
`;
}
// Hà m fetch vá»i timeout
function fetchWithTimeout(url, timeout = 10000) {
return Promise.race([
fetch(url),
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Request timeout')), timeout)
)
]);
}
// Hà m lấy dữ liá»u tráºn Äấu từ API và render
async function refreshMatches() {
const matchList = getMatchList();
if (!matchList) {
console.error('Không tìm thấy phần tỠmatch-list');
return;
}
// Chá» hiá»n thá» loading nếu chưa có data từ cache
if (!matchList.querySelector('.match-card')) {
showLoading();
}
try {
const apiBase = getApiDomain();
const response = await fetchWithTimeout(apiBase + '/api/matches?t=' + new Date().getTime(), 10000);
if (!response.ok) {
throw new Error('Lá»i khi lấy dữ liá»u API: ' + response.status);
}
const datas = await response.json();
if (!datas.data || typeof datas.data !== 'object') {
throw new Error('Cấu trúc dữ liá»u API không hợp lá»');
}
const newMatches = [];
const matchesByGroup = {}; // Nhóm matches theo competitionName
for (const [key, data] of Object.entries(datas.data)) {
// Bảo vỠnếu anchorAppointmentVoList không phải array
const anchorList = Array.isArray(data.anchorAppointmentVoList) ? data.anchorAppointmentVoList : [];
//if (!anchorList.length) continue;
// Bá» các tráºn "Live streaming"
if (anchorList[0]?.nickName === 'Live streaming') continue;
// Bảo vá» tá» sá»
const homeScoreArr = Array.isArray(data.homeScore) ? data.homeScore : [];
const awayScoreArr = Array.isArray(data.awayScore) ? data.awayScore : [];
const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0;
const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0;
// Nếu match có house_id khác null, thêm ?houseId=... và o slug
let slug = key;
if (data.house_id && data.house_id !== null) {
slug = `${key}?houseId=${data.house_id}`;
}
const competitionName = data.competitionName || 'NBA';
const matchData = {
id: 2,
slug: slug,
sport: sportName(data.sportId),
live: data.matchStatus === 2,
hot: true,
blv: anchorList[0]?.nickName !== 'Live streaming',
date: formatDate(fixtime(data.matchTime), 'd/m'),
datesearch: formatDate(fixtime(data.matchTime), 'Y-m-d'),
hour: formatDate(fixtime(data.matchTime), 'H:i'),
competitionName: competitionName,
teams: [
data.homeTeamName || 'Team C',
data.awayTeamName || 'Team D'
],
score: `${homeScore}:${awayScore}`,
videoUrl: data.videoUrl || 'https://live2.example.com',
animationUrl: data.animationUrl || 'https://animation.example.com',
data: data
};
newMatches.push(matchData);
// Nhóm matches theo competitionName
if (!matchesByGroup[competitionName]) {
matchesByGroup[competitionName] = [];
}
matchesByGroup[competitionName].push(matchData);
}
// Gá»i hà m render vá»i danh sách tráºn Äấu má»i
renderAllMatches(newMatches);
filterMatches('parent', newMatches);
saveMatchesToCache(newMatches); //
} catch (error) {
console.error('Lá»i khi là m má»i tráºn Äấu:', error);
// Äã loại bá» showErrorWithSuggestions() Äá» không ghi Äè giao diá»n SSR nếu API thất bại á» lần gá»i Äầu tiên.
// Há» thá»ng sẽ âm thầm giữ nguyên giao diá»n SSR và Äợi Socket cáºp nháºt.
}
}
function createMatchCard(match) {
// Bảo vá» dữ liá»u, tránh crash nếu cache cÅ© thiếu data
if (!match || !match.data) return '';
// Bảo vỠanchorAppointmentVoList
const anchorList = Array.isArray(match.data.anchorAppointmentVoList)
? match.data.anchorAppointmentVoList
: [];
// XỠlý slug an toà n
const slugStr = match.slug || '';
const baseSlug = slugStr.includes('?') ? slugStr.split('?')[0] : slugStr;
const nicknames = anchorList.map(item => {
const itemHouseId = item.houseId || '';
if (itemHouseId !== '') {
const separator = baseSlug.includes('?') ? '&' : '?';
return `<a href="https://openblox.io/truc-tiep/${baseSlug}${separator}houseId=${itemHouseId}" rel="nofollow">${item.nickName}</a>`;
} else {
return `<a href="https://openblox.io/truc-tiep/${slugStr}" rel="nofollow">${item.nickName}</a>`;
}
});
const nicknameString = nicknames.join(' | ');
// Bảo vá» tá» sá» (dùng lại match.score nếu muá»n)
const homeScoreArr = Array.isArray(match.data.homeScore) ? match.data.homeScore : [];
const awayScoreArr = Array.isArray(match.data.awayScore) ? match.data.awayScore : [];
const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0;
const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0;
return `
<div class="match-card" data-id="${match.id}" data-sport="${match.sport}" data-live="${match.live}" data-blv="${match.blv}" data-hot="${match.hot}" data-date="${match.datesearch}">
<div class="match-card__body">
<a href="https://openblox.io/truc-tiep/${match.slug}" class="link-match" rel="nofollow"></a>
<div class="match-card__header">
<div class="match-card__league">
<span>${match.data.competitionName}</span>
</div>
<div class="match-card__status">
${match.data.matchStatus == 1
? '<div class="match-card__status text-warning text-uppercase">CHƯA BẮT ÄẦU</div>'
: match.data.matchStatus == 2
? '<div class="match-card__status streaming">ÄANG TRá»°C TIẾP</div>'
: match.data.matchStatus == 3
? '<span class="btn btn--warning text-uppercase">Tạm ngừng phát sóng</span>'
: match.data.matchStatus == 4
? '<span class="btn btn--danger text-uppercase">Cấm phát sóng vÄ©nh viá»
n</span>'
: '<span class="btn btn--secondary text-uppercase">Không xác Äá»nh</span>'
}
</div>
<div class="match-card__time"><span class="match-time">${match.hour} - ${match.date}</span></div>
</div>
<div class="match-card__teams">
<div class="team home">
<img src="${match.data.homeTeamLogo}" alt="${match.data.homeTeamName}" class="team__logo">
<span class="team__name">${match.data.homeTeamName}</span>
</div>
<div class="match-card__score">${homeScore} - ${awayScore}</div>
<div class="team">
<img src="${match.data.awayTeamLogo}" alt="${match.data.awayTeamName}" class="team__logo">
<span class="team__name">${match.data.awayTeamName}</span>
</div>
</div>
<div class="match-card__info">
<div class="match-card__stats">
<div class="match-card__stats-content">
${nicknameString}
</div>
</div>
<div class="match-card__odds">
<a href="https://openblox.io/truc-tiep/${match.slug}" class="btn btn--primary" rel="nofollow">
<span>XEM NGAY</span>
</a>
</div>
</div>
</div>
</div>
`;
}
// Khá»i tạo bá» lá»c
let currentFilters = {
sport: 'all',
live: false,
blv: false,
hot: false,
commentator: false,
date: 'all',
league: 'all'
};
// Tá»i ưu: Preload video metadata Äá» tÄng tá»c Äá» load khi click và o match
const videoPreloadCache = new Map(); // Cache preloaded videos
function preloadVideoMetadata(videoUrl) {
if (!videoUrl || videoPreloadCache.has(videoUrl)) {
return; // Äã preload rá»i
}
// Mark as preloading
videoPreloadCache.set(videoUrl, { status: 'loading', timestamp: Date.now() });
// Preload bằng cách tạo video element và load metadata
const video = document.createElement('video');
video.preload = 'metadata'; // ChỠload metadata, không load toà n bỠvideo
video.muted = true;
video.playsInline = true;
video.style.display = 'none';
video.addEventListener('loadedmetadata', function () {
videoPreloadCache.set(videoUrl, { status: 'loaded', timestamp: Date.now() });
document.body.removeChild(video);
});
video.addEventListener('error', function () {
videoPreloadCache.set(videoUrl, { status: 'error', timestamp: Date.now() });
if (document.body.contains(video)) {
document.body.removeChild(video);
}
});
video.src = videoUrl;
document.body.appendChild(video);
// Cleanup cache sau 5 phút
setTimeout(() => {
videoPreloadCache.delete(videoUrl);
}, 5 * 60 * 1000);
}
// Tá»i ưu: Cache match-list selector
let matchListCache = null;
function getMatchList() {
if (!matchListCache) {
matchListCache = document.getElementById('match-list');
}
return matchListCache;
}
// Hà m render toà n bá» tráºn Äấu
function renderAllMatches(matches) {
const matchList = getMatchList();
if (!matchList) {
console.error('Không tìm thấy phần tỠmatch-list');
return;
}
// Xóa danh sách cũ
matchList.innerHTML = '';
// Render danh sách má»i
matches.forEach(match => {
if (!match || !match.data) return; // Bá» qua match lá»i
const cardHTML = createMatchCard(match);
if (!cardHTML) return; // Bá» qua nếu không tạo ÄÆ°á»£c thẻ
const tempDiv = document.createElement('div');
tempDiv.innerHTML = cardHTML.trim();
const cardElement = tempDiv.firstChild;
if (!cardElement) return;
// Ẩn các tráºn không có bình luáºn viên
/*if (cardElement.getAttribute('data-blv') === 'false') {
cardElement.classList.add('d-none');
}*/
// Tá»i ưu: Preload video metadata khi hover và o match card
if (match.data && match.data.videoUrl) {
let preloadTimeout = null;
cardElement.addEventListener('mouseenter', function () {
// Debounce: chá» preload sau 500ms hover
preloadTimeout = setTimeout(() => {
preloadVideoMetadata(match.data.videoUrl);
}, 500);
});
cardElement.addEventListener('mouseleave', function () {
if (preloadTimeout) {
clearTimeout(preloadTimeout);
preloadTimeout = null;
}
});
}
matchList.appendChild(cardElement);
});
// Cáºp nháºt bá» Äếm
const visibleMatches = document.querySelectorAll('.match-card:not(.d-none)');
updateFilterCounts(visibleMatches, document.querySelectorAll('.match-card'));
}
// Hà m lá»c tráºn Äấu
function filterMatches(type, matches) {
const allCards = document.querySelectorAll('.match-card');
// Lá»c theo môn thá» thao
const sportFiltered = Array.from(allCards).filter(card => {
const sport = card.dataset.sport;
return currentFilters.sport === 'all' || sport === currentFilters.sport;
});
let finalFiltered = sportFiltered;
// Ãp dụng các bá» lá»c khác
if (currentFilters.live) {
finalFiltered = finalFiltered.filter(card => card.dataset.live === 'true' && card.dataset.blv === 'true');
} else if (currentFilters.blv) {
finalFiltered = finalFiltered.filter(card => card.dataset.blv === 'false');
} else if (currentFilters.hot) {
finalFiltered = finalFiltered.filter(card => card.dataset.hot === 'true' && card.dataset.blv === 'true');
} else if (currentFilters.date !== 'all') {
finalFiltered = finalFiltered.filter(card => card.dataset.date === currentFilters.date && card.dataset.blv === 'true');
}
// Hiá»n thá»/ẩn các thẻ
allCards.forEach(card => {
card.classList.toggle('d-none', !finalFiltered.includes(card));
});
// Cáºp nháºt bá» Äếm
if (type === 'parent') {
updateFilterCounts(sportFiltered, allCards);
} else {
updateFilterCounts(finalFiltered, allCards);
}
}
// Gắn sá»± kiá»n cho nút lá»c môn thá» thao
document.querySelectorAll('.sports-filter__button[data-sport]').forEach(button => {
button.addEventListener('click', () => {
currentFilters.sport = button.getAttribute('data-sport');
filterMatches('parent');
});
});
// Gắn sá»± kiá»n cho nút lá»c con
document.querySelectorAll('.sports-filter__button_child').forEach(btn => {
btn.addEventListener('click', function () {
const filterType = this.getAttribute('data-filter');
const value = this.getAttribute('data-value');
if (filterType === 'date') {
currentFilters.date = value;
currentFilters.live = false;
currentFilters.hot = false;
currentFilters.blv = false;
} else if (filterType === 'live') {
currentFilters.live = true;
currentFilters.date = 'all';
currentFilters.hot = false;
currentFilters.blv = false;
} else if (filterType === 'hot') {
currentFilters.hot = true;
currentFilters.date = 'all';
currentFilters.live = false;
currentFilters.blv = false;
} else if (filterType === 'child_all') {
currentFilters.live = false;
currentFilters.hot = false;
currentFilters.blv = false;
currentFilters.date = 'all';
}
document.querySelectorAll('.sports-filter__button_child').forEach(b => b.classList.remove('active'));
this.classList.add('active');
filterMatches('child');
});
});
// Gắn sá»± kiá»n cho toggle livescore
const liveToggle = document.getElementById('livescoreToggle');
if (liveToggle) {
liveToggle.addEventListener('change', () => {
currentFilters.live = liveToggle.checked;
filterMatches('parent');
});
}
// ===== WEBSOCKET INTEGRATION =====
let wsClient = null;
let matchesWebSocketConnected = false;
let fallbackPollingInterval = null;
// Function Äá» transform WebSocket data format
function transformWebSocketMatches(data) {
const newMatches = [];
for (const [key, matchData] of Object.entries(data)) {
// Logic tương tự như trong refreshMatches()
const anchorList = Array.isArray(matchData.anchorAppointmentVoList)
? matchData.anchorAppointmentVoList
: [];
if (anchorList[0]?.nickName === 'Live streaming') continue;
const homeScoreArr = Array.isArray(matchData.homeScore) ? matchData.homeScore : [];
const awayScoreArr = Array.isArray(matchData.awayScore) ? matchData.awayScore : [];
const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0;
const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0;
let slug = key;
if (matchData.house_id && matchData.house_id !== null) {
slug = `${key}?houseId=${matchData.house_id}`;
}
const competitionName = matchData.competitionName || 'NBA';
const matchDataObj = {
id: 2,
slug: slug,
sport: sportName(matchData.sportId),
live: matchData.matchStatus === 2,
hot: true,
blv: anchorList[0]?.nickName !== 'Live streaming',
date: formatDate(fixtime(matchData.matchTime), 'd/m'),
datesearch: formatDate(fixtime(matchData.matchTime), 'Y-m-d'),
hour: formatDate(fixtime(matchData.matchTime), 'H:i'),
competitionName: competitionName,
teams: [
matchData.homeTeamName || 'Team C',
matchData.awayTeamName || 'Team D'
],
score: `${homeScore}:${awayScore}`,
videoUrl: matchData.videoUrl || 'https://live2.example.com',
animationUrl: matchData.animationUrl || 'https://animation.example.com',
data: matchData
};
newMatches.push(matchDataObj);
}
return newMatches;
}
// Function Äá» init WebSocket
function initMatchesWebSocket() {
// WebSocket URL - có thỠconfig từ PHP hoặc hardcode
// Nếu có server-socket service, dùng URL Äó
// Format: wss://server.gvapi.cc hoặc ws://localhost:3320
const wsUrl = 'wss://server.ws-xyz.com/ws'; // Thay bằng URL thực tế của bạn
// Check nếu RealtimeWebSocketClient Äã ÄÆ°á»£c load
if (typeof RealtimeWebSocketClient === 'undefined') {
console.warn('[Homepage] RealtimeWebSocketClient not loaded, falling back to polling');
startFallbackPolling();
return;
}
wsClient = new RealtimeWebSocketClient(wsUrl);
// Subscribe to matches updates
wsClient.subscribe('matches:updated', (data) => {
//console.log('[Homepage] Received matches update from WebSocket');
if (data.code === '0000' && data.data) {
// Transform data Äá» tương thÃch vá»i renderAllMatches()
const transformedMatches = transformWebSocketMatches(data.data);
renderAllMatches(transformedMatches);
filterMatches('parent', transformedMatches);
saveMatchesToCache(transformedMatches); //
} else if (data.data && typeof data.data === 'object') {
// Nếu data trực tiếp là object (không có code)
const transformedMatches = transformWebSocketMatches(data.data);
renderAllMatches(transformedMatches);
filterMatches('parent', transformedMatches);
saveMatchesToCache(transformedMatches); //
}
});
// Handle connection events
wsClient.subscribe('connected', () => {
//console.log('[Homepage] WebSocket connected');
matchesWebSocketConnected = true;
// Stop fallback polling nếu Äang chạy
if (fallbackPollingInterval) {
clearInterval(fallbackPollingInterval);
fallbackPollingInterval = null;
}
});
wsClient.subscribe('disconnected', () => {
//console.log('[Homepage] WebSocket disconnected, falling back to polling');
matchesWebSocketConnected = false;
startFallbackPolling();
});
wsClient.subscribe('error', (error) => {
console.error('[Homepage] WebSocket error:', error);
matchesWebSocketConnected = false;
startFallbackPolling();
});
wsClient.connect();
}
// Fallback polling nếu WebSocket fail
function startFallbackPolling() {
if (fallbackPollingInterval) return; // Already running
//('[Homepage] Starting fallback polling');
fallbackPollingInterval = setInterval(() => {
if (!matchesWebSocketConnected) {
refreshMatches(); // Use existing function
} else {
// WebSocket reconnected, stop polling
clearInterval(fallbackPollingInterval);
fallbackPollingInterval = null;
}
}, 120000); // 2 minutes như cũ
}
// Nếu SSR Äã render HTML, ta không cần nạp từ localStorage hay fetch API lần Äầu nữa (tránh nháy mà n hình)
const ssrCardsCount = document.querySelectorAll('.match-card').length;
if (ssrCardsCount === 0) {
// Thá» load từ cache trưá»c nếu không có SSR
const cachedMatches = loadMatchesFromCache();
if (cachedMatches && cachedMatches.length > 0) {
try {
renderAllMatches(cachedMatches);
filterMatches('parent', cachedMatches);
} catch (error) {
console.error('[Cache Render Error]', error);
}
}
// Fetch fresh data từ API (cáºp nháºt + ghi Äè cache)
refreshMatches();
}
// Thá» WebSocket trưá»c, fallback to polling nếu fail
// Delay má»t chút Äá» Äảm bảo RealtimeWebSocketClient Äã ÄÆ°á»£c load
setTimeout(() => {
initMatchesWebSocket();
}, 500);
// Cleanup khi page unload
window.addEventListener('beforeunload', () => {
if (wsClient) {
wsClient.disconnect();
}
if (fallbackPollingInterval) {
clearInterval(fallbackPollingInterval);
}
});
</script>
<style>
.home-banner-slider {
width: 100%;
margin: 15px 0;
border-radius: 8px;
overflow: hidden;
position: relative;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
display: none;
/* Hidden by default until loaded */
z-index: 10;
}
.home-banner-track {
display: flex;
transition: transform 0.5s ease-in-out;
height: 100%;
}
.home-banner-slide {
min-width: 100%;
display: block;
text-decoration: none;
}
.home-banner-slide img {
width: 100%;
height: auto;
display: block;
object-fit: cover;
}
.home-banner-dots {
position: absolute;
bottom: 10px;
left: 0;
right: 0;
display: flex;
justify-content: center;
gap: 6px;
}
.home-banner-dot {
width: 8px;
height: 8px;
background: rgba(255, 255, 255, 0.5);
border-radius: 50%;
cursor: pointer;
transition: background 0.3s;
}
.home-banner-dot.active {
background: white;
transform: scale(1.2);
}
</style>
<script>
document.addEventListener('DOMContentLoaded', async function () {
try {
// Fetch settings
const res = await fetch('https://api.gvapi.cc/api/settings');
const data = await res.json();
if (data.success && data.home_banners && data.home_banners.length > 0) {
const banners = data.home_banners.sort((a, b) => a.order - b.order);
// Create slider container
const sliderContainer = document.createElement('div');
sliderContainer.className = 'home-banner-slider';
const track = document.createElement('div');
track.className = 'home-banner-track';
const dotsContainer = document.createElement('div');
dotsContainer.className = 'home-banner-dots';
banners.forEach((banner, index) => {
// Slide
const slide = document.createElement('a');
slide.className = 'home-banner-slide';
slide.href = banner.link_url && banner.link_url !== '#' ? banner.link_url : 'javascript:void(0)';
slide.target = banner.link_url && banner.link_url !== '#' ? '_blank' : '_self';
const img = document.createElement('img');
img.src = banner.image_url;
img.alt = banner.name || 'Banner';
slide.appendChild(img);
track.appendChild(slide);
// Dot
const dot = document.createElement('div');
dot.className = 'home-banner-dot';
if (index === 0) dot.classList.add('active');
dot.addEventListener('click', () => {
goToSlide(index);
});
dotsContainer.appendChild(dot);
});
sliderContainer.appendChild(track);
if (banners.length > 1) {
sliderContainer.appendChild(dotsContainer);
}
// Inject into DOM (after h1 in hero content)
const h1 = document.querySelector('.hero__content h1');
if (h1) {
h1.insertAdjacentElement('afterend', sliderContainer);
sliderContainer.style.display = 'block';
// Slider Logic
let currentIndex = 0;
let autoPlayInterval;
const totalSlides = banners.length;
function goToSlide(index) {
if (totalSlides <= 1) return;
currentIndex = index;
track.style.transform = `translateX(-${currentIndex * 100}%)`;
// Update dots
Array.from(dotsContainer.children).forEach((d, i) => {
if (i === currentIndex) d.classList.add('active');
else d.classList.remove('active');
});
resetAutoPlay();
}
function nextSlide() {
let next = currentIndex + 1;
if (next >= totalSlides) next = 0;
goToSlide(next);
}
function resetAutoPlay() {
clearInterval(autoPlayInterval);
autoPlayInterval = setInterval(nextSlide, 3000);
}
if (totalSlides > 1) {
resetAutoPlay();
}
}
}
} catch (err) {
console.error('Lá»i load home banners:', err);
}
});
</script>
<style>
@media (min-width: 481px) and (max-width: 767px) {
.match-card__status {
max-width: 120px;
font-size: 12px;
}
}
@media (min-width: 576px) and (max-width: 767px) {
.match-card__league {
max-width: 100px;
}
}
@media (min-width: 481px) and (max-width: 575px) {
.match-card__header {
flex-direction: row !important;
}
.match-card__time {
max-width: 100px !important;
}
}
.top-live-box {
width: 100%;
height: auto;
display: flex;
gap: 8px;
}
.top-live-box .left {
width: 100%;
min-height: 564px;
background-color: #000;
border-radius: 4px;
overflow: hidden;
}
.top-live-box .live-list {
width: 240px;
flex-shrink: 0;
}
.top-live-box .live-list .live-item {
width: 100%;
height: 144px;
margin-bottom: 6px;
cursor: pointer;
border-radius: 4px;
transition: all .1s ease-in-out;
overflow: hidden;
border: 2px solid transparent;
position: relative;
}
.top-live-box .live-list .live-item .anchor-item {
width: 100%;
height: 100%;
}
.el-image img {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
}
.btn-view-truc-tiep {
position: absolute;
top: 70%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 5;
background: #f2152d;
padding: 20px;
border-radius: 30px;
cursor: pointer;
text-align: center;
}
.btn-view-truc-tiep:hover {
opacity: 0.8;
}
.video-player {
position: relative;
}
.top-live-box .live-list .live-item.active {
border: 2px solid #ff0202;
}
.overlay-click {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 10;
display: block;
}
/* Responsive */
@media screen and (max-width: 1024px) {
.top-live-box {
flex-direction: column;
}
.top-live-box .left {
width: 100%;
min-height: 400px;
}
.top-live-box .live-list {
display: none !important;
width: 100%;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
gap: 6px;
margin-top: 12px;
}
.top-live-box .live-list .live-item {
width: calc(50% - 6px);
height: 120px;
}
}
@media screen and (max-width: 768px) {
.top-live-box .left {
min-height: unset;
}
.btn-view-truc-tiep {
padding: 10px 10px;
font-size: 12px;
}
.top-live-box .live-list .live-item {
width: calc(50% - 3px);
height: 100px;
}
}
@media screen and (max-width: 480px) {
.top-live-box .live-list .live-item {
width: calc(50% - 3px);
height: 100px;
}
.btn-view-truc-tiep {
padding: 8px 14px;
font-size: 13px;
}
.match-card__body {
gap: 0.6rem;
}
}
</style>
<script src="//unpkg.byted-static.com/xgplayer/3.0.0-next.1/dist/index.min.js"></script>
<script src="//unpkg.com/[email protected]/dist/index.min.js"></script>
<link rel="stylesheet" href="//unpkg.byted-static.com/xgplayer/3.0.0-alpha.100/dist/xgplayer.min.css" />
<script type="text/javascript">
// Hà m lấy domain API random cho video-home (pinned-home)
function getVideoHomeApiDomain() {
const domains = [
'video-home.gvapi.cc'
];
// Random chá»n má»t domain
const index = Math.floor(Math.random() * domains.length);
const selected = domains[index];
return 'https://' + selected;
}
document.addEventListener('DOMContentLoaded', function () {
const apiBase = getVideoHomeApiDomain();
const STORAGE_KEY = 'pinnedMatchesCache';
const heroSection = document.querySelector('section.hero');
if (!heroSection) {
console.error('Hero section not found.');
return;
}
const skeletonHtml = `
<div class="top-live-box container skeleton-loading" id="pinned-matches-container">
<style>
.skeleton-box {
display: inline-block;
height: 100%;
width: 100%;
position: relative;
overflow: hidden;
background-color: #2a2a2a;
border-radius: 8px;
}
.skeleton-box::after {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
transform: translateX(-100%);
background-image: linear-gradient(
90deg,
rgba(255, 255, 255, 0) 0,
rgba(255, 255, 255, 0.05) 20%,
rgba(255, 255, 255, 0.2) 60%,
rgba(255, 255, 255, 0)
);
animation: shimmer 2s infinite;
content: '';
}
@keyframes shimmer { 100% { transform: translateX(100%); } }
.skeleton-loading .left { aspect-ratio: 16/9; background: #1a1a1a; padding: 10px; border-radius: 8px;}
.skeleton-loading .live-list { display: flex; gap: 10px; margin-top: 10px; }
.skeleton-loading .live-item { flex: 1; aspect-ratio: 1/1; background: #1a1a1a; border-radius: 8px; overflow: hidden; }
</style>
<div class="left">
<div class="skeleton-box" style="min-height: 300px;"></div>
</div>
<div class="live-list">
<div class="live-item"><div class="skeleton-box"></div></div>
<div class="live-item"><div class="skeleton-box"></div></div>
<div class="live-item"><div class="skeleton-box"></div></div>
<div class="live-item"><div class="skeleton-box"></div></div>
</div>
</div>
`;
function renderMatches(matches) {
const anchors = matches.slice(0, 4).map((match, index) => ({
streamUrl: match.playStreamAddress2,
image: match.houseImage,
name: match.nickName,
slug: match.slugKey + '?houseId=' + match.houseId
}));
if (anchors.length === 0) return;
const streamUrl = anchors[0].streamUrl;
const liveBoxHtml = `
<div class="top-live-box container" id="pinned-matches-container">
<div class="left">
<div class="video-container">
<div class="video-player">
<div id="mse" style="width: 100%;"></div>
<a href="/truc-tiep/${anchors[0].slug}" class="overlay-click" id="btn-view-link" rel="nofollow"></a>
<span class="btn-view-truc-tiep" rel="nofollow">Và o phòng live Äang phát sóng</span>
</div>
</div>
</div>
<div class="live-list">
${anchors.map((anchor, index) => `
<div class="live-item ${index === 0 ? 'active' : ''} live-living-item" data-index="${index}">
<div class="anchor-item">
<div class="placeholder img">
<img src="${anchor.image}" alt="${anchor.name}" style="object-fit: cover;">
</div>
</div>
</div>
`).join('')}
</div>
</div>
`;
const existingContainer = document.getElementById('pinned-matches-container');
if (existingContainer) {
existingContainer.outerHTML = liveBoxHtml;
} else {
heroSection.insertAdjacentHTML('afterend', liveBoxHtml);
}
if (window.Player && window.HlsPlayer) {
new Player({
plugins: [window.HlsPlayer],
id: "mse",
ignores: ["time", "progress"],
autoplayMuted: true,
autoplay: true,
playsinline: true,
isLive: true,
fluid: true,
pip: true,
muted: true,
url: streamUrl
});
}
const liveItems = document.querySelectorAll('#pinned-matches-container .live-item');
const viewLink = document.getElementById('btn-view-link');
liveItems.forEach(item => {
item.addEventListener('click', () => {
const index = parseInt(item.getAttribute('data-index'));
liveItems.forEach(i => i.classList.remove('active'));
item.classList.add('active');
if (window.Player && window.HlsPlayer) {
new Player({
plugins: [window.HlsPlayer],
id: "mse",
ignores: ["time", "progress"],
autoplayMuted: true,
autoplay: true,
playsinline: true,
isLive: true,
fluid: true,
pip: true,
muted: true,
url: anchors[index].streamUrl
});
}
if (viewLink) {
viewLink.href = '/truc-tiep/' + anchors[index].slug;
}
});
});
}
let hasLocalData = false;
try {
const cached = localStorage.getItem(STORAGE_KEY);
if (cached) {
const parsed = JSON.parse(cached);
if (parsed && parsed.length > 0) {
renderMatches(parsed);
hasLocalData = true;
}
}
} catch (e) {
console.error('Error parsing localStorage:', e);
}
if (!hasLocalData) {
heroSection.insertAdjacentHTML('afterend', skeletonHtml);
}
fetch('https://video-home.gvapi.cc/api/pinned-home?t=' + new Date().getTime())
.then(response => {
if (!response.ok) throw new Error('API Response not ok: ' + response.status);
return response.json();
})
.then(data => {
const matches = data.pinnedMatches;
if (!matches || matches.length < 1) {
localStorage.removeItem(STORAGE_KEY);
const existingContainer = document.getElementById('pinned-matches-container');
if (existingContainer) existingContainer.remove();
return;
}
localStorage.setItem(STORAGE_KEY, JSON.stringify(matches));
renderMatches(matches);
})
.catch(error => {
console.error('Error fetching API data:', error);
if (!hasLocalData) {
const existingContainer = document.getElementById('pinned-matches-container');
if (existingContainer) existingContainer.remove();
}
});
});
</script>
<style>
.aligncenter {
margin: 0 auto;
}
.wp-caption {
max-width: 100%;
}
footer .container {
grid-template-columns: 1fr;
}
</style>
<script>
const mini = document.querySelector('.video-player.is-floating.floating-draggable');
const margin = 8; // cách mép
function clampFloatingVideo() {
if (!mini) return;
const rect = mini.getBoundingClientRect();
let x = rect.left;
let y = rect.top;
const vw = window.innerWidth;
const vh = window.innerHeight;
const minX = margin;
const minY = margin; // nếu muá»n chừa notch: + safeTop
const maxX = vw - rect.width - margin;
const maxY = vh - rect.height - margin;
if (x < minX) x = minX;
if (x > maxX) x = maxX;
if (y < minY) y = minY;
if (y > maxY) y = maxY;
mini.style.left = x + 'px';
mini.style.top = y + 'px';
}
// chạy lại má»i khi viewport thay Äá»i
window.addEventListener('scroll', clampFloatingVideo);
window.addEventListener('resize', clampFloatingVideo);
window.addEventListener('orientationchange', clampFloatingVideo);
// iOS Safari thanh URL co giãn â nên dùng thêm:
if (window.visualViewport) {
visualViewport.addEventListener('resize', clampFloatingVideo);
visualViewport.addEventListener('scroll', clampFloatingVideo);
}
</script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30","add_request_uri":"","add_self_reference_link":""};
/* ]]> */
</script>
<script type="text/javascript" src="https://cdn.openblox.io/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js?ver=2.0.74" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://cdn.openblox.io/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js?ver=2.2.1" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://cdn.openblox.io/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js?ver=1.9.2" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>","chamomile_theme_is_on":""};
/* ]]> */
</script>
<script type="text/javascript" src="https://cdn.openblox.io/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js?ver=2.0.74-1746443216" id="ez-toc-js-js"></script>
<script>
// === Catfish Banner Global: lấy từ API /api/catfish-banners (giá»ng React CatfishBanners.jsx) ===
(function () {
var apiUrl = 'https://api.gvapi.cc/api/catfish-banners';
fetch(apiUrl)
.then(function (res) { return res.ok ? res.json() : null; })
.then(function (data) {
if (!data || !data.success || !data.data || !data.data.length) return;
// === Video catfish overlay (nếu có trong trang watch) ===
var catfishLink = data.data[0].link_url || '';
if (catfishLink) {
var overlayTop = document.querySelector('.video-catfish-overlay-top');
var overlayBottom = document.querySelector('.video-catfish-overlay');
if (overlayTop) {
overlayTop.href = catfishLink;
overlayTop.style.display = 'block';
}
if (overlayBottom) {
overlayBottom.href = catfishLink;
overlayBottom.style.display = 'block';
}
}
// === Tạo container catfish-banner-global (fixed bottom, giá»ng React) ===
var wrapper = document.createElement('div');
wrapper.className = 'catfish-banner-global';
wrapper.style.cssText = 'position:fixed;bottom:0;left:0;right:0;z-index:9999;display:flex;flex-direction:column;align-items:center;pointer-events:none;width:50%;margin:0 auto;';
// Nút Äóng
var closeBtn = document.createElement('button');
closeBtn.className = 'catfish-banner-close';
closeBtn.innerHTML = 'â';
closeBtn.setAttribute('aria-label', 'Äóng quảng cáo');
closeBtn.style.cssText = 'position:absolute;top:-24px;right:4px;width:24px;height:24px;background:rgba(0,0,0,0.7);color:#fff;border:none;border-radius:50%;font-size:14px;line-height:24px;text-align:center;cursor:pointer;pointer-events:auto;z-index:10000;padding:0;';
closeBtn.addEventListener('click', function () { wrapper.remove(); });
wrapper.appendChild(closeBtn);
// Render banners
data.data.forEach(function (banner) {
var a = document.createElement('a');
a.className = 'catfish-banner-global-item';
a.href = banner.link_url || '#';
a.target = '_blank';
a.rel = 'nofollow noopener noreferrer';
a.style.cssText = 'display:block;width:100%;pointer-events:auto;line-height:0;cursor:pointer;';
var img = document.createElement('img');
img.src = banner.image_url;
img.alt = banner.name || 'Banner';
img.style.cssText = 'width:100%;height:auto;display:block;object-fit:contain;';
a.appendChild(img);
wrapper.appendChild(a);
});
document.body.appendChild(wrapper);
// Mobile: full width
var mq = window.matchMedia('(max-width: 768px)');
function applyMobile(e) { wrapper.style.width = e.matches ? '100%' : '50%'; }
applyMobile(mq);
mq.addListener(applyMobile);
})
.catch(function (e) { console.warn('Catfish banner load failed:', e); });
})();
</script>
<script>
// === FIX: Chặn smooth-scroll handlers can thiá»p và o catfish overlay ===
(function () {
document.addEventListener('click', function (e) {
var overlay = e.target.closest('.video-catfish-overlay, .video-catfish-overlay-top');
if (!overlay) return;
var href = overlay.getAttribute('href');
if (href && href !== '#' && !href.startsWith('#')) {
e.stopImmediatePropagation();
}
}, true);
})();
</script>
<script>
document.addEventListener("DOMContentLoaded", function () {
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false);
while (walker.nextNode()) {
const node = walker.currentNode;
if (node.nodeValue.match(/vô Äá»ch quá»c gia/i)) {
node.nodeValue = node.nodeValue.replace(/vô Äá»ch quá»c gia/gi, "VÄQG");
}
}
});
</script>
<script>
document.addEventListener('DOMContentLoaded', function () {
function updateLinks() {
document.querySelectorAll('.home-banner-slide').forEach(function(el) {
el.href = 'https://refvsbf.com/';
el.target = '_blank';
});
}
// Banner hiá»n có
updateLinks();
// Banner render sau bằng JS/API
new MutationObserver(updateLinks).observe(document.body, {
childList: true,
subtree: true
});
});
</script>
</html>
<!-- | openblox.io | 2026-10-16 11:11:26 -->
| # |
Url |
Url |
Source |
Date |
| 1 |
https://openblox.io/ |
|
2026-10-16 14:53:12 |
| 2 |
https://glowin88aplikasi.com/ |
|
2026-10-16 14:53:12 |
| 3 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 14:53:11 |
| 4 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 14:53:11 |
| 5 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 14:53:10 |
| 6 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-16 14:53:10 |
| 7 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 14:53:10 |
| 8 |
https://apotheek-de-esch.nl/ |
|
2026-10-16 14:53:09 |
| 9 |
https://theshark.in/ |
|
2026-10-16 14:53:09 |
| 10 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 14:53:09 |
| 11 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-16 14:53:08 |
| 12 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 14:53:08 |
| 13 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-16 14:53:07 |
| 14 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-16 14:53:07 |
| 15 |
https://rtpgacorjitu.com/ |
|
2026-10-16 14:53:07 |
| 16 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-16 14:53:07 |
| 17 |
https://www.texarkanatwins.com/%25… |
|
2026-10-16 14:53:06 |
| 18 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-16 14:53:06 |
| 19 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-16 14:53:06 |
| 20 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-16 14:53:06 |