php – Reproductor de música infinita imitación radio

He programado un reproductor de música (playlist) que da sensación de radio. Es decir, tengo la música subida al servidor y cuando acaba la que se está reproduciendo aleatoriamente carga otra, y así continuamente.

El problema es que tras un rato sonando se para (quizás 1 hora o 30 min) es variable, y no sé la razón. Paso datos a través de ajax. Paso la carátula del CD, un enlace de compra a la música, y un botón para Like.

Si alguien puede ayudarme a optimizar o encontrar la razón del porqué deja de reproducirse sería genial.

Estructura

<?php
//buscar cancion en php
$sql=mysqli_query($con,"SELECT * FROM ______ WHERE publicar = 1 ORDER BY rand() LIMIT 1");
$row=mysqli_fetch_array($sql);
$url = $row(1);
$title = $row(2);
$artist = $row(3);
$albumart = $row(4);
$cd = $row(5);
$compra = $row(6);
$id = $row(0);

$_SESSION('contador') = 1;
$_SESSION('canciones') = $id;
?>

<section style="background: #fff;padding: 20px 0px;">  
  <div class="container">
    <div class="row">
        <div class="col-md-12">
          <div id="contenido">
              <div class="album-art">
                <div class="overlay"></div>
                <div class="album-art-img"><img src="https://es.stackoverflow.com/album/<?php echo $albumart; ?>" width="194" height="194"></div>
              </div>
              <div class="meta">
                <div class="meta-song"><?php echo $title; ?></div>
                <div class="meta-artist"><?php echo $cd; ?></div>
                <div class="meta-album"><?php echo $artist; ?></div>
              </div>
              <div style="display:none" id="id_cancion"><?php echo $id; ?></div>
              <div style="display:none" id="id_compra"><?php echo $compra; ?></div>
          </div>
      </div>
    </div>
  </div>
</section>
     
     <!-- CONTROLES DE REPRODUCCIÓN -->
<section style="background: #2f2f2f;padding: 10px 0px 20px 0px">  
  <div class="container">
    <div class="row">
        <div class="col-md-12" id="comprar">

          <?php
         //MOSTRAMOS BOTON DE COMPRA
          if ($compra == false) {
                    echo '<span class="boton-play shop" style="opacity:0.3"><i class="fas fa-shopping-cart"></i></span>';
            } else {
                    echo '<a href="'.$compra.'" target="_blank" data-toggle="tooltip" title="Comprar" class="boton-play shop"><i class="fas fa-shopping-cart"></i></a>';
            }
          ?>
         //MOSTRAMOS BOTON DE PLAY/PAUSE
          <a href="javascript:void(0)" data-toggle="tooltip" title="Play" onclick="aud_play_pause()" class="boton-play play1"><i id="stateicon" class="fa fa-pause"></i></a>
         //MOSTRAMOS BOTON DE LIKE
          <ul class="hearts">
            <li class="heart"><a href="#" onclick="mivoto(event)" data-voto="heart" class="boton-play cor"><i class="fa fa-heart"></i></a></li>
          </ul>        
      </div>
         //MOSTRAMOS BARRA DE VOLUMEN
      <div class="col-md-12 d-none d-sm-none d-md-block" id="vol">
          <div id="player">
            <i class="fa fa-volume-down"></i>
            <div id="volume"></div>
            <i class="fa fa-volume-up"></i>
          </div>
      </div>
    </div>
  </div>
</section> 

Cuando acaba la canción buscamos cargar otra con este script:

<script>
var audio;

init();
function init(){

var $aud = $("#audio"), 
    $vol = $('#volume'),
    AUDIO= $aud(0);
    AUDIO.volume = 0.75;
    audio = $('audio');
    audio(0).currentTime = 12;
    
    run("<?php echo $url; ?>", audio(0));

    audio(0).addEventListener('ended',function(e){
        $.post("buscar_cancion.php", {termino: ""+$('#id_cancion').html()+""}, function(data){
          if(data.length >0) {
                        var recoge=data.split("|");                        
                        $('#contenido').html(recoge(0));
                        $('#comprar').html(recoge(2));
                        $('#lista').html(recoge(3)); 
                        run(recoge(1),audio(0));                                       
          }   
        });
    }); 
</script>

Y llamamos a buscar_canción.php

<?php
if ($_SESSION('contador') == 24) {
        $_SESSION('canciones') = $_REQUEST('termino');
        $_SESSION('contador') = 0;
}

if ($_SESSION('contador') <> 0) {
        $_SESSION('canciones') = $_SESSION('canciones').",".$_REQUEST('termino');
}

$_SESSION('contador') = $_SESSION('contador') + 1;
$canciones=$_SESSION('canciones');
$lista_canciones=$_SESSION('canciones');

$sql=mysqli_query($con,"SELECT * FROM ______ WHERE publicar = 1 and id not in ($canciones) ORDER BY rand() LIMIT 1");
$row=mysqli_fetch_array($sql);
$url = $row(1);
$title = $row(2);
$artist = $row(3);
$albumart = $row(4);
$cd = $row(5);
$compra = $row(6);
$id = $row(0);

echo '<div class="album-art">
        <div class="overlay"></div>
        <div class="album-art-img"><img src="https://es.stackoverflow.com/album/".$albumart.'" width="194" height="194"></div>
        </div>
        <div class="meta">
        <div class="meta-song">'.$title.'</div>
        <div class="meta-artist">'.$cd.'</div>
        <div class="meta-album">'.$artist.'</div>
        </div>
        <div style="display:none" id="id_cancion">'.$id.'</div>
        <div style="display:none" id="id_compra">'.$compra.'</div>|'.$url.'|';
        if ($compra == false) {
                echo '<span class="boton-play shop"><i class="fas fa-shopping-cart"></i></span>';
        } else {
                echo '<a href="'.$compra.'" target="_blank" data-toggle="tooltip" title="Comprar" class="boton-play shop"><i class="fas fa-shopping-cart"></i></a>';
        }
        echo '<a href="javascript:void(0)" data-toggle="tooltip" title="Play" onclick="aud_play_pause()" class="boton-play play1"><i id="stateicon" class="fa fa-pause"></i></a>
        <ul class="hearts">
            <li class="heart"><a href="#" onclick="mivoto(event)" data-voto="heart" class="boton-play cor"><i class="fa fa-heart"></i></a></li>
          </ul>|';

        }
?>