Каковы правильные заголовки для аудио и видео потока URL в PHP? - PullRequest
1 голос
/ 31 марта 2019

Я играю аудио в формате mp3 и видео в формате mp4, но хочу скрыть URL-адрес с помощью PHP. Я следовал за этим PHP: как я могу заблокировать прямой URL-доступ к файлу, но при этом разрешить егоскачал вошедшие в систему пользователи? .

HTML-код

<audio controls>
<source src="get_song.php?name=my-song-name" type="audio/mpeg">
Your browser does not support the audio element.
</audio> 


<video controls>
<source src="get_video.php?name=my-video-name" type="video/mp4">
Your browser does not support the video element.
</video> 

PHP

get_song.php

if( !empty( $_GET['name'] ) )
{
  // check if user is logged    
  if( is_logged() )
  {
    $song_name = preg_replace( '#[^-\w]#', '', $_GET['name'] );
    $song_file = " 
   {$_SERVER['DOCUMENT_ROOT']}/members/files/{$song_name}.mp3";
    if( file_exists( $song_file ) )
    {
      header( 'Cache-Control: public' );
      header( 'Content-Description: File Transfer' );
      header( "Content-Disposition: attachment; filename={$song_file}" );
      header( 'Content-Type: application/mp3' );
      header( 'Content-Transfer-Encoding: binary' );
      readfile( $song_file );
      exit;
    }
  }
}
die( "ERROR: invalid song or you don't have permissions to download it." );

get_video.php

if( !empty( $_GET['name'] ) )
{
  // check if user is logged    
  if( is_logged() )
  {
    $video_name = preg_replace( '#[^-\w]#', '', $_GET['name'] );
    $video_file = " 
   {$_SERVER['DOCUMENT_ROOT']}/members/files/{$video_name}.mp4";
    if( file_exists( $song_file ) )
    {
      header( 'Cache-Control: public' );
      header( 'Content-Description: File Transfer' );
      header( "Content-Disposition: attachment; filename={$video_file}" );
      header( 'Content-Type: application/mp4' );
      header( 'Content-Transfer-Encoding: binary' );
      readfile( $video_file );
      exit;
    }
  }
}
die( "ERROR: invalid song or you don't have permissions to download it." );

Нопроблема в том, что аудио занимает много времени для потоковой передачи, обрезается посередине и возвращается назад с самого начала.Также видео не загружается на мобильный.Что-то не так с заголовками?какие правильные заголовки для этого?

Я нашел другое решение здесь, но видео все еще не загружается, и звук возвращается назад. Скрыть аудио-URL в PHP :

$filename = '/path/to/audio.mp3';
if(is_file($filename)) 
{
    header('Content-Type: audio/mpeg');
    header('Content-Disposition: 
inline;filename="'.basename($filename).'"');
    header('Content-length: '.filesize($filename));
    header('Cache-Control: no-cache');
    header("Content-Transfer-Encoding: chunked"); 
    readfile($filename);
}



$videoname = '/path/to/video.mp4';
    if(is_file($videoname)) 
    {
        header('Content-Type: video/mp4');
        header('Content-Disposition: 
    inline;filename="'.basename($videoname).'"');
        header('Content-length: '.filesize($videoname));
        header('Cache-Control: no-cache');
        header("Content-Transfer-Encoding: chunked"); 
        readfile($videoname);
    }

В чем разница между кодировкой передачи контента Chunked и Binary?Каковы правильные заголовки для аудио и видео?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...