audo mp3 сделать чтоб не могли скачать
есть такой вопрос есть файл в корен сайта например test.mp3 как сделать чтоб его вставили на html audo тегу и услишали пользователи но не могли скачать его? за акцент извините не русский
Ответы (2 шт):
Есть хитрый вариант - конвертировать мп3 во flash с изображением собственного плеера, (или без него) а на сайте использовать это с расширением не .swf, а mp3. В итоге, это можно будет скачать, но при попытке воспроизведения в плеерах файл будет звучать с завышенной скоростью, и никто не поймет, почему. Но вряд ли кто-то догадается, что на самом деле это файл swf а не мп3.
Есть вариант хранить мп3-файлы на сервере в зашифрованном виде, и для получения возможности прослушивать нужно будет один раз ввести ключ для расшифровки. После этого он сохранится в localStorage и в дальнейшем можно будет свободно слушать музыку, а она будет на лету расшифровываться. Это может быть полезным так же для организации платного контента.
<audio id=audio src="http://opan.strana.de/encrypted-music/trewq.mp3" controls></audio>
<button onclick="localStorage.setItem('key', ''); location.reload()"> Удалить ключ </button>
<script>
if(!localStorage.getItem('key')) localStorage.setItem('key', prompt('Введите ключ'));
let xhr = new XMLHttpRequest();
xhr.open("get", audio.src);
xhr.responseType = "arraybuffer";
xhr.send();
xhr.onload = function(){
let index = 0;
let arr = new Uint8Array(xhr.response);
let mylength = arr.length;
let out = [[], []];
for(i = 0; i < mylength; i ++){
for(j = 0; j < localStorage.getItem('key'); j ++){
while(out[1][index] = false){
index ++;
if(index >= mylength) index = 0;
}
index ++;
if(index >= mylength) index = 0;
}
out[0][i] = arr[index];
out[1][index] = false;
}
audio.src = URL.createObjectURL(new Blob([new Uint8Array(out[0])]));
}
</script>
В этом примере ключ равен семи. (7)
Живая ссылка: Воспроизведение зашифрованного аудиофайла