// Se espera en la URL este tipo de llamada .html?type={audio,video}&channel={url_a_reproducir} function loadItem(from) { var value; if (from == "audio") { value = document.getElementById("input-reproduccion-audio").value; reproduceAudio(value); } else if (from == "video") { value = document.getElementById("input-reproduccion-video").value; reproduceVideo(value); } } function reproduceVideo(channelToReproduce) { console.log("Reproducing video: " + channelToReproduce); if (channelToReproduce.includes("m3u8")) { var divInfo = document.getElementById("video-player").childElementCount; if (divInfo == 0) { player = new Clappr.Player({ source: channelToReproduce, parentId: '#video-player', height: '500px', width: '100%', autoPlay: true, }); } else { // Assume player instance is already created player.configure({ source: channelToReproduce, }); } clearResolutions(); getResolution(channelToReproduce, updateResolution); } ga('send', { hitType: 'event', eventCategory: 'Video', eventAction: 'play', eventLabel: channelToReproduce }); } function reproduceAudio(channelToReproduce) { if (channelToReproduce.includes("pls")) { getURLsFromPLS(channelToReproduce, reproducePLSFromUrl); } else { reproduceAudioFromUrl(channelToReproduce); } } function reproduceAudioFromUrl(channelToReproduce) { console.log("Reproducing audio: " + channelToReproduce); var audioSource = document.getElementById('audio-controller'); var audioPlayer = document.getElementById('audio-player'); audioPlayer.src = channelToReproduce; audioSource.load(); audioSource.pause(); var playPromise = audioSource.play(); if (playPromise !== undefined) { playPromise.then(function() { // Automatic playback started! }).catch(function(error) { // Automatic playback failed. // Show a UI element to let the user manually start playback. }); } ga('send', { hitType: 'event', eventCategory: 'Audio', eventAction: 'play', eventLabel: channelToReproduce }); } function reproducePLSFromUrl(data) { reproduceAudioFromUrl(data[0]); updateExtraAudioInfo("pls_more_url_available", data); } function updateResolution(resolutions) { console.log("Resoluciones: " + resolutions); for (i = 0; i < resolutions.length; i++) { var resolutionToAdd = resolutions[i]; if (i < resolutions.length - 1){ resolutionToAdd += ", "; } document.getElementById("video-resolution").innerHTML += resolutionToAdd; } } function clearResolutions() { document.getElementById("video-resolution").innerHTML = ""; } function updateExtraAudioInfo(type, data) { console.log("Extra info type: " + type); console.log("Extra info data: " + data); var textToAdd = ""; if (type == "pls_more_url_available") { for (i = 0; i < data.length; i++) { textToAdd += data[i] + "
"; } } document.getElementById("extra-audio-info").innerHTML = textToAdd; document.getElementById("extra-audio-info-div").style.display = "block"; } function getURLsFromPLS(sUrl, fn_callback) { $.get(sUrl, function(data) { $response = data.split("\n"); $urls=[]; $.each($response, function( index, value ) { $line_separated_value = value.split("="); if ($line_separated_value.length > 1 && $line_separated_value[1].indexOf("http") != -1) { $urls.push($line_separated_value[1]); } }); fn_callback($urls) //$.each($urls, function( index, value ) { // if (checkIfWebsiteWorks(value)) { // fn_callback(value); // break; // } //}); }); }; function getResolution(from, fn_callback) { $.get(from, function(data) { $response = data.split("\n"); $resolutions=[]; $.each($response, function( index, value ) { $line_separated_value = value.split(","); for (i = 0; i < $line_separated_value.length; i++) { if ($line_separated_value[i].indexOf("RESOLUTION=") != -1) { $resolutions.push($line_separated_value[i].split('=')[1]); } } }); fn_callback($resolutions); }); } function getUrlParameter(sParam) { var sPageURL = decodeURIComponent(window.location.search.substring(1)), sURLVariables = sPageURL.split('&'), sParameterName, i; for (i = 0; i < sURLVariables.length; i++) { sParameterName = sURLVariables[i].split('='); if (sParameterName[0] === sParam) { return sParameterName[1] === undefined ? true : sParameterName[1]; } } }; // Check an URL is valid or broken // FIXME: For streams if it works it keeps loading infinite time function checkIfWebsiteWorks(sUrl){ $.get(sUrl, function(data, status){ alert("Data: " + data + "\nStatus: " + status); }); } function filterChannelsList() { var input, filter, div, li, a, i, txtValue; input = document.getElementById("searchInput"); filter = input.value.toUpperCase(); div = document.getElementById("channel-list"); elements = div.getElementsByTagName("a"); for (i = 0; i < elements.length; i++) { txtValue = elements[i].textContent || elements[i].innerText; if (txtValue.toUpperCase().indexOf(filter) > -1) { elements[i].style.display = ""; } else { elements[i].style.display = "none"; } } } function onChannelClick(channel){ channel = JSON.parse(channel); reproduceVideo(channel['options'][0]['url']) //document.getElementById("titleh1").innerText = document.getElementById("container").offsetWidth if (document.getElementById("container").offsetWidth < 720) { document.getElementById("video").scrollIntoView({behavior: "smooth", block: "start", inline: "nearest"}); } } function loadChannelsInList() { fetch('http://91.121.64.179/tdt_project/output/channels.json') .then(function(response) { return response.json(); }) .then(function(myJson) { console.log(myJson); nacionales = myJson[1]; var items = []; $.each(nacionales["ambits"], function( ambit, ambit_val ) { $.each(ambit_val["channels"], function( key, val ) { items.push("" + val["name"] + "") }); }); $(items.join( "" )).appendTo(".channels-list"); }); }