이번 포스트에서는
itag란 무엇인지
높은 퀄리티의 음악 스트리밍 데이터를 가져오기
위해서는 어떻게 이용해야 할지
에 대해 알려드리겠습니다.
Itag란 무엇일까?
유튜브 스트리밍 포멧을 의미합니다.
쉽게 말해서 소리, 영상의 유무, 화질, 음질에 대한
정보를 담고 있습니다.
준수한 품질의 정보를 가진 itag를 사용한다면 더 좋은
음질과 안정성을 보장할수있습니다.
ytdl-core는 무엇일까?
유튜브 스트리밍 리소스를 가져와 스트리밍 하는
라이브러리입니다. (법적 문제 x) 해당 라이브러리를
이용하여 ReadableStream를 받아 스트리밍을 진행할
수 있으며 다운로드 또한 가능합니다.
해당 라이브러리를 이용하여 쾌적하게 스트리밍을 할려면 아래와 같이 설정해주는 것이 좋습니다.
- 비디오를 가져오지 않고 오디오만 가져온다.(스트리밍 filter 설정)
- 적절한 하이워터마크(streaming buffer size)를 설정한다. (스트리밍 옵션 설정)
- filter 설정에서 퀄리티나 포멧(mp4, opus 등등)을 설정한다.
그럼 좋은 퀄리티를 위해서는 itag만 다루면 되는건가?
위와같이 생각하실수도 있지만 실제로 좋은 itag를 찾기는 힘듬니다.
그 이유는 현재 존재하는 itag목록들중에서는 누락되거나 없어진 태그들이 존재하며
특정 태그에서는 오디오가 길게 늘어지는 현상도
보이기 때문이죠.
하지만 힘들뿐
찾는게 불가능한것은 아닙니다.
아래의 사이트에서 하나하나 시도해가며 좋은
포멧(itag)를 찾으실수있습니다.
https://github.com/fent/node-ytdl-core/blob/master/lib/formats.js
node-ytdl-core/lib/formats.js at master · fent/node-ytdl-core
YouTube video downloader in javascript. Contribute to fent/node-ytdl-core development by creating an account on GitHub.
github.com
아니면 아래의 정리된 사이트에서 지원여부를
확인해가며 찾을 수 있기도 합니다.
https://gist.github.com/AgentOak/34d47c65b1d28829bb17c24c04a0096f#dash-audio
Youtube Format IDs
Youtube Format IDs. GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
itag외 다른 방법이 있을까?
바로 streaming option 중 filter에서 여러가지 옵션을 적용해서 오디오 퀄리티를 조정하는 방법인데요.
filter 인자 에서는 다양한 옵션이 존재하는데요.
아래와 같은 옵션은 itag 대용으로 사용할 수 있습니다!
audioQuality | 추천: AUDIO_QUALITY_MEDIUM, AUDIO_QUALITY_LOW |
준수한 오디오 품질을 위해 설정 |
hasVideo | false | 비디오 데이터를 받지않아 효율적으로 음악 스트리밍 재생 가능 |
hasAudio | true | 오디오 스트리밍 필요 |
container | 추천: mp4 flv, 3gp, mp4, webm, ts |
webm은 오디오가 늘어지는 버그가 발생함 또한 mp4가 많이 사용되며 안정적임 |
아래는 필수적인 옵션입니다!
highWaterMark: 1 << 62,
liveBuffer: 1 << 62,
dlChunkSize: 0,
requestOptions: {
maxRedirections: 5
}
해당 옵션은 음악의 재생시간이 일정길이 이상으로 되었을때 Error: aborted 오류가 발생하였고
위의 코드를 사용한 결과 1시간 이상의 영상에서도 중단되는 오류를 발견이 되지 않았습니다.
코드 정리
const stream = ytdl(url, {
agent: agent,
filter: format =>
format.audioQuality == "AUDIO_QUALITY_MEDIUM" &&
format.hasVideo == false &&
format.hasAudio == true &&
format.container == "mp4",
highWaterMark: 1 << 62,
liveBuffer: 1 << 62,
dlChunkSize: 0,
requestOptions: {
maxRedirections: 5
}
})
agent인자에 대해서는 아래의 블로그를 참조해주세요!
디스코드 레니 봇 개발 일지_(ytdl-core 비트레이트 높이기 및 버그 고치기 ) (tistory.com)
디스코드 레니 봇 개발 일지_(ytdl-core 비트레이트 높이기 및 버그 고치기 )
지금까지는 ytdl-core를 사용하면서 음악봇을 운영했지만 해당 라이브러리는 버그가 많다..;; 대표적인 건 ECONNRESET, 429, 403 또는 스트리밍 멈춤, 렉, 불안정함... 아주 환장하겠다. (이래서.. 라바링
devlany.tistory.com
'discord developer' 카테고리의 다른 글
discord 유튜브 음악 봇 개발이 힘든 이유와 차선책 (0) | 2025.03.07 |
---|---|
"디스코드 초대 링크"와 "Oauth2 인증을 통한 guilds.join"간의 차이점이 있을까? (0) | 2025.01.14 |
디스코드 봇 개발 일지 (REST API를 이용하여 간단하게 디스코드 봇 사용하기) (0) | 2024.02.15 |
디스코드 레니 봇 개발 일지_(비트레이트 높이는 방법,@distube/ytdl-core 사용, many request 해결) (0) | 2024.01.19 |
디스코드 레니 봇 개발 일지_ ( 로그 편 ) (5) | 2023.11.20 |