Технически, есть 2 варианта:
1. Отдавать скачиваемое на PHP. Для генерации временной ссылки можно использовать:
A) класс
NoDirectLinks. Временные ссылки надо складывать в БД и проверять их "валидность" и периодически чистить.
B) делать временную ссылку вида "ID_ValidDate", которую шифровать методом
обратимого шифрования. Если периодически менять ключ кодирования (и алгоритм), такую ссылку невозможно взломать и подделать.
Внешне ссылка выглядит как хэш
56af5b4C..., но на сервере её можно декодировать обратно в "ID скачиваемой записи по БД" и "время жизни ссылки". Если время жизни истекло - контент не отдаётся. Вместо ID можно запаковывать и имя файла.
В обоих вариантах делается файл типа
get.php, который проверяет "валидность" временной ссылки и отдаёт контент.
В вашем случае это плохо - при медленном интернете у юзера, загрузка видео/аудио будет идти долго, PHP-скрипт будет висеть и жрать ресурсы.
2. Делать временную ссылку средствами операционной системы, например, через
symlink() на PHP.
Тогда медиа-файл будет отдаваться веб-сервером без участия PHP, что намного лучше.
Всё-равно придется хранить эти ссылки в БД и решать вопрос их устаревания и чистки.
Но временную ссылку, как уже отметили выше, лучше делать не для
страницы, а для самого скачиваемого
файла (вам же просто надо чтобы ваши видео не транслировались с вашего хостинга на чужие сайты). Иначе поисковики наиндексируют тонну дублей это страницы. Или придётся закрыть страницу с этими временными URL от индексации.
PS: Я в своё время делал вариант 1 B) для платного скачивания документации - работало неплохо.
PPS: Делать временную ссылку для проигрывания медиа-файлов не есть хорошо. Посмотрите как работают плееры ютуба (и другие, не показывающие реальный файл) - они бьют файл на кусочки и отдают частями.
Но, даже в этом случае, стандарт HTML5 позволяет скачать файл целиком тем, кто прошарен :)