본문 바로가기

개발일지/디스코드 봇

디스코드 봇 개발 일지 2023-01-09 - skip, MPD Manifest 문제 해결

 

 

※ 작성자가 작성한 내용이 일부 틀릴 수도 있음 주의

 

※ 작성자가 코드 쓰다가 계속 코드 수정함 주의

 

 

 

서버 주인장이 휴가(군인, 친구)를 나와서 드디어 봇을 초대할 수 있었다.

 

 

그리고 실전테스트를 거쳐서

 

다음과 같은 메시지를 보았다.

 

[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() 만 넣어도 다음 노래로 넘어가져서

 

다른 방식으로 코드를 짰을 경우, 경우에 따라 해당 값을 바꿔주는 식으로 해야할 수 있으니

 

주의하길 바란다.

 

 

 

 

728x90