CINXE.COM

Aroma IPTV : 亘孬 賲噩丕賳賶

<!DOCTYPE html> <html lang="ar"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="description" content="賲卮丕賴丿丞 亘孬 賲亘丕卮乇 賲噩丕賳賷 賱賯賳賵丕鬲 Aroma IPTV 亘噩賵丿丞 毓丕賱賷丞. 丕禺鬲乇 賲賳 賯丕卅賲丞 丕賱賯賳賵丕鬲 賵卮丕賴丿 丕賱賯賳賵丕鬲 丕賱賲賮囟賱丞 賱丿賷賰 賲噩丕賳賸丕 毓賱賶 丕賱廿賳鬲乇賳鬲."> <meta name="keywords" content="亘孬 賲亘丕卮乇, 賯賳賵丕鬲 IPTV, 賯賳賵丕鬲 賲噩丕賳賷丞, Aroma IPTV, 賲卮丕賴丿丞 丕賱鬲賱賮夭賷賵賳 丕賵賳賱丕賷賳, 賯賳賵丕鬲 毓乇亘賷丞, 賯賳賵丕鬲 乇賷丕囟賷丞, 賯賳賵丕鬲 兀賮賱丕賲 , 亘孬 賲噩丕賳賶"> <meta name="author" content="Aroma IPTV"> <meta property="og:title" content="Aroma IPTV - Free Live TV"> <meta property="og:description" content="卮丕賴丿 丕賱賯賳賵丕鬲 丕賱賲賮囟賱丞 賱丿賷賰 賲亘丕卮乇丞 毓亘乇 丕賱廿賳鬲乇賳鬲 亘丕爻鬲禺丿丕賲 Aroma IPTV. 賯賳賵丕鬲 賲噩丕賳賷丞 亘噩賵丿丞 毓丕賱賷丞."> <meta property="og:image" content="/images/logo.png"> <meta property="og:url" content="https://aromatv.vip/live"> <meta property="og:type" content="website"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:title" content="Aroma IPTV Free Live TV"> <meta name="twitter:description" content="賲卮丕賴丿丞 亘孬 賲亘丕卮乇 賲噩丕賳賷 賱賯賳賵丕鬲 Aroma IPTV 亘噩賵丿丞 毓丕賱賷丞. 丕禺鬲乇 賲賳 賯丕卅賲丞 丕賱賯賳賵丕鬲 賵卮丕賴丿 丕賱賯賳賵丕鬲 丕賱賲賮囟賱丞 賱丿賷賰 賲噩丕賳賸丕 毓賱賶 丕賱廿賳鬲乇賳鬲."> <meta name="twitter:image" content="/images/logo.png"> <title>Aroma IPTV : 亘孬 賲噩丕賳賶</title> <style> @import url('https://fonts.googleapis.com/css2?family=Noto+Kufi+Arabic:wght@400;700&display=swap'); body { font-family: 'Noto Kufi Arabic', sans-serif; margin: 0; padding: 0; background: linear-gradient(to bottom, #8B0000, #FF6347); color: #fff; } .header { text-align: center; padding: 20px; background: rgba(0, 0, 0, 0.8); } .header img { width: 100px; height: auto; } .header h1 { margin: 10px 0; color: #FFC0CB; font-size: 1.5em; } .container { display: flex; flex-direction: column; height: calc(100vh - 120px); } .menu { width: 100%; max-width: 350px; background: rgba(0, 0, 0, 0.7); padding: 20px; overflow-y: auto; } .menu h2 { text-align: center; margin-bottom: 10px; color: #FFC0CB; } .menu input { width: 100%; padding: 10px; margin-bottom: 15px; border: 1px solid #333; border-radius: 5px; background: #1f1f1f; color: #fff; } .menu .category { margin-bottom: 20px; } .menu .category h3 { color: #FFC0CB; margin-bottom: 10px; } .menu ul { list-style: none; padding: 0; } .menu ul li { margin: 10px 0; display: flex; align-items: center; gap: 10px; cursor: pointer; } .menu ul li img { width: 40px; height: 40px; border-radius: 5px; } .menu ul li span { flex: 1; color: #fff; font-weight: bold; } .menu ul li.active { background-color: #FF6347; border-radius: 5px; } .player { flex: 1; display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 20px; } .player video { max-width: 100%; height: auto; border: 3px solid #FFC0CB; border-radius: 10px; background: #000; } @media (min-width: 768px) { .container { flex-direction: row; } .menu { width: 250px; } .player { padding: 40px; } } @media (max-width: 768px) { .menu { order: 1; } .player { order: 0; } } </style> <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> </head> <body> <div class="header"> <img src="/images/logo.png" alt="Aroma IPTV Logo"> <h1>亘孬 賲噩丕賳賶</h1> </div> <div class="container"> <div class="menu"> <h2>Channel List</h2> <input type="text" id="searchInput" placeholder="Search for a channel"> <div id="categories"> <!-- Categories will be dynamically added here --> </div> </div> <div class="player"> <video id="videoPlayer" controls autoplay muted> Your browser does not support the video tag. </video> </div> </div> <script> const categoriesContainer = document.getElementById('categories'); const videoPlayer = document.getElementById('videoPlayer'); const searchInput = document.getElementById('searchInput'); let activeChannel = null; // Function to play channel using HLS.js if necessary const playChannel = (url, listItem) => { if (Hls.isSupported()) { const hls = new Hls(); hls.loadSource(url); hls.attachMedia(videoPlayer); hls.on(Hls.Events.MANIFEST_PARSED, () => { videoPlayer.muted = false; // Unmute after autoplay starts videoPlayer.play().catch(err => console.error('Autoplay failed:', err)); }); } else if (videoPlayer.canPlayType('application/vnd.apple.mpegurl')) { videoPlayer.src = url; videoPlayer.load(); videoPlayer.muted = false; // Unmute after autoplay starts videoPlayer.play().catch(err => console.error('Autoplay failed:', err)); } else { alert('HLS is not supported in your browser. Please try a different browser.'); } // Mark the active channel if (activeChannel) { activeChannel.classList.remove('active'); } listItem.classList.add('active'); activeChannel = listItem; }; // Load M3U file fetch('list.m3u') .then(response => response.text()) .then(data => { const lines = data.split('\n'); let currentLogo = ''; let currentName = ''; let currentCategory = ''; const channels = []; lines.forEach(line => { line = line.trim(); if (line.startsWith('#EXTINF')) { const logoMatch = line.match(/tvg-logo="(.*?)"/); const nameMatch = line.match(/,(.*)$/); const categoryMatch = line.match(/group-title="(.*?)"/); if (logoMatch) { currentLogo = logoMatch[1]; } if (nameMatch) { currentName = nameMatch[1]; } if (categoryMatch) { currentCategory = categoryMatch[1]; } } else if (line && !line.startsWith('#')) { channels.push({ name: currentName, logo: currentLogo, url: line, category: currentCategory }); } }); const displayChannels = (filter = '') => { categoriesContainer.innerHTML = ''; const categories = {}; channels.filter(channel => channel.name.toLowerCase().includes(filter.toLowerCase())).forEach(channel => { if (!categories[channel.category]) { categories[channel.category] = []; } categories[channel.category].push(channel); }); Object.keys(categories).forEach(categoryName => { const categoryDiv = document.createElement('div'); categoryDiv.classList.add('category'); const categoryTitle = document.createElement('h3'); categoryTitle.textContent = categoryName; categoryDiv.appendChild(categoryTitle); const ul = document.createElement('ul'); categories[categoryName].forEach(channel => { const listItem = document.createElement('li'); const img = document.createElement('img'); const nameSpan = document.createElement('span'); img.src = channel.logo; img.alt = "Channel Logo"; nameSpan.textContent = channel.name; listItem.addEventListener('click', () => { playChannel(channel.url, listItem); }); listItem.appendChild(img); listItem.appendChild(nameSpan); ul.appendChild(listItem); // Automatically load "Rotana Cinema KSA" on page load if (channel.name === "Rotana Cinema KSA (1080p)") { playChannel(channel.url, listItem); } }); categoryDiv.appendChild(ul); categoriesContainer.appendChild(categoryDiv); }); }; searchInput.addEventListener('input', (e) => { displayChannels(e.target.value); }); displayChannels(); }) .catch(error => console.error('Error loading M3U file:', error)); // Add error handling for the video player videoPlayer.addEventListener('error', (e) => { console.error('Error playing the video:', e); alert('An error occurred while trying to play the stream. Please try another channel.'); }); </script> </body> </html>