2017-12-11 18 views
0

Heys guys!자바 스크립트 네이티브 오디오 라이브러리를 사용하는 큰 파일의 지연

네이티브 오디오 클래스을 사용하여 특정 위치의 오디오를 재생하려고하는데 작은 오디오 (몇 초)에서 훌륭하게 작동하지만 20 분 오디오에서 동일한 오디오를 시도하면 약 0.5 초 정도의 지연이 필요한데, 이는 내가 필요한 것보다 훨씬 많습니다.

나는 이것을 설명하기 위해 간단한 jsfiddle을 만들었습니다. 문제를 이해하는 데 도움이되기를 바랍니다.

길고 짧은 오디오의 두 위치 모두 정확히 동일하게 재생해야하지만 실제로는 그렇지 않습니다. 또한 두 개의 화면 캡처를 연결하여 오디오의 위치가 올바른지 확인합니다.

아이디어가 있으십니까? 미리 감사드립니다 !!

jsfiddle : https://jsfiddle.net/oxmanroman/n4sLLuk9/4/

playShortAudio().then(() => { 
    setTimeout(playLongAudio, 1000); 
}) 

function playShortAudio() { 
    // play from 2 seconds, 400 milliseconds 
    return playAudio('https://s3.amazonaws.com/thespanishapp/test.mp3', 2.400); 
} 

function playLongAudio() { 
    // play from 4 minutes, 27 seconds, 750 milliseconds 
    return playAudio('https://s3.amazonaws.com/thespanishapp/large-test.mp3', 267.750); 
} 

function playAudio(url, startingPoint) { 
    return new Promise(resolve => { 
    const audio = new Audio(url); 
    // set audio position to listen 'hello miss...' 
    audio.currentTime = startingPoint; 
    // play audio when ready 
    audio.oncanplaythrough =() => { 
     audio.play(); 
     // stop the audio and resolve the promise after two seconds of audio 
     setTimeout(() => { 
     audio.pause(); 
     resolve(); 
     }, 2000); 
    } 
    }); 
} 

enter image description here

+0

관련 파일을로드하는 데 걸리는 시간 때문입니다. 동시에 시작하려면 미리로드해야합니다. –

+0

canplaythrough 이벤트 바인드가 아닌가요? 오디오가 재생 될만큼 충분히로드되었을 때? 나는 audio.preload = 'auto'설정을 시도했다; 그러나 여전히 같은 결과를 얻고 있습니다. –

답변

0

정확한 문제는 MP3 형식입니다.

시작 시간은 정확하지만 MP3는 "시간 편이"가이며 다른 브라우저보다 더 나쁜 브라우저입니다. 대신 AAC (.m4a) 형식을 사용하는 것이 좋습니다. 표류하는 시간을 제거 할뿐만 아니라 AAC는 데스크탑과 모바일 모두에서 더 나은 이식성을 제공합니다.