※ 작성자가 작성한 내용이 일부 틀릴 수도 있음 주의
※ 작성자가 코드 쓰다가 계속 코드 수정함 주의
서버 주인장이 휴가(군인, 친구)를 나와서 드디어 봇을 초대할 수 있었다.
그리고 실전테스트를 거쳐서
다음과 같은 메시지를 보았다.
[youtube] MQAthqwzwgk: Downloading webpage
[youtube] MQAthqwzwgk: Downloading MPD manifest
[2023-01-09 17:01:59] [INFO ] discord.player: ffmpeg process 14956 successfully terminated with return code of 1.
보통 맨 위의 첫 줄만 나오고, 최종적으로 return code 가 0이 나오곤 했었는데,
일부 영상 URL에 대해서
MPD manifest 를 다운로드한다는 메시지가 추가로 보였다.
그리고 return code 가 1이 나와, 비정상적인 종료가 되는 것도 확인했다.
문제 해결법을 찾는데에 많은 삽질을 했는데, 결국 수정할게 많지는 않았다.
MPD (MPEG-DASH Media Presentation Description) Manifest 문제
여기서 DASH는 또 "동적 적응 스트리밍 (Dynamic Adaptive Streaming over HTTP)"의 약자라고 한다.
그래서 MPEG-DASH를 대충 설명하자면
"데이터를 전체 다 받기 전에도 표시해주어 스트리밍을 가능하게 하는 데이터 전송 방법"
정도로 생각하면 되겠다.
이론적인 내용은 그냥 넘어가도록 하자. ISO 표준이니 뭐니는 지금 중요한 것은 아니니.
ydl_opts = {
'quiet': False,
'default_search': 'ytsearch',
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
'youtube_include_dash_manifest': False,
}
전 글에서의 ydl_opts 를 다음과 같이 수정하면 되는데,
아마 메인은 youtube_include_dash_manifest 값을 False 로 바꿔주는 것인 것 같다.
그러면 MPD Manifest 를 다운받는다는 로그도 안 뜨고, 음악도 잘 로드가 되는 것을 확인할 수 있다.
Skip
저번 글에 음악 봇 기능 중에 skip 을 넣는 것을 잊었다.
그래서 별거는 아니지만 그 부분만 따로 여기에 적어두겠다.
@bot.command()
async def skip(message):
if message.channel == messageChannel:
bot.voice_clients[0].stop()
await message.channel.send("현재 노래를 스킵합니다")
리스트에 있는 url 을 play 할 때 자동으로 목록의 다음번째를 지정하도록 하다보니
VoiceClient.stop() 만 넣어도 다음 노래로 넘어가져서
다른 방식으로 코드를 짰을 경우, 경우에 따라 해당 값을 바꿔주는 식으로 해야할 수 있으니
주의하길 바란다.
'개발일지 > 디스코드 봇' 카테고리의 다른 글
디스코드 봇 개발 일지 2023-01-26 - Embed (0) | 2023.01.26 |
---|---|
디스코드 봇 개발 일지 2023-01-11 - 유튜브 검색 기능, 영상 정보 (0) | 2023.01.11 |
디스코드 봇 개발 일지 2023-01-05 - 음악 봇 (2) | 2023.01.05 |
디스코드 봇 개발 일지 2023-01-02 - 음성 채널 입장 및 퇴장 (0) | 2023.01.02 |
디스코드 봇 개발 일지 2022-12-29 - Commands (2) | 2022.12.29 |