본문 바로가기

운동하는 개발자/Windows

VLC Player streaming delay "http debug: connection failed"

728x90

1. 문제 내용

로컬에 스트리밍 웹서버를 구축한 뒤 VLC로 streaming재생 시 로딩 속도가 상당히 오래 걸림
(팟플레이어, 곰플레이어는 정상)

2. 문제 추적

Windows VLC Player ->   도구 -> 환경설정 -> 설정 보기 전체 -> 고급 -> 기록 도구 -> 로그파일 생성

저장 후 다시 상황 재연 시 입력한 경로, 파일명으로 로그파일 생성

 

3. 로그분석

(VLC 로그는 타임스탬프가 없는 치명적인 문제점이 있다)

http debug: outgoing request:
GET /streaming/abc.mkv HTTP/1.1

Host: localhost:61946

Accept: */*

Accept-Language: en_US

User-Agent: VLC/3.0.16 LibVLC/3.0.16

Range: bytes=0-

http debug: connection failed

http debug: outgoing request:
GET /streaming/abc.mkv HTTP/1.1

Host: localhost:61946

Accept: */*

Accept-Language: en_US

User-Agent: VLC/3.0.16 LibVLC/3.0.16

Range: bytes=0-

http debug: incoming response:
HTTP/1.1 206 Partial Content

Connection: close

Content-Type: video/mkv

Content-Length: 4573026410

Date: Thu, 21 Apr 2022 13:51:56 GMT

Content-Range: bytes 0-4573026409/*

Accept-Ranges: bytes

로그를 분석해 보니 첫 번째 Get요청을 날리고 http debug: connection failed라는 로그가 찍히고 다시 동일한 전문을 한번 더 전송하고 정상 응답을 가져갔다
서버 로그에는 동일 전문이 2번씩 온 적도 없고 connection로그도 한 번만 찍혀있기에 실제로 연결이 한번 실패한 것으로 보이고 이때 connection failed 후 약 2~3초 후에 재시도하는 것으로 추측되었다
그리고 또 다음 블록을 요청할 때 첫 번째 Get 전송 시 또 connection failed 발생 그리고 동일한 방법으로 동일 내용을 한번 더 쏘면 정상응답 획득하는 구조였다
(로딩 시간이 딜레이 되지 않는 플레이어들은 재시도 요청 대기시간이 없는 것으로 보임)

4. 해결

서버의 각종 설정을 바꿔보고 별거 다해보았으나 답은 어이없게도 우연히 엉뚱한 곳에서 발견한다
자체 로컬 서버를 사용하기에 URL 주소는 아래와 같았다

http://localhost:1234/streaming/abc.mkv

VLC에서 보내는 패킷을 후킹 해보려고 하다가 

http://127.0.0.1:1234/streaming/abc.mkv
http://[아이피]:1234/streaming/abc.mkv

위와 같이 127.0.0.1 혹은 아이피를 직접 써주니 connection failed도 발생하지 않았고 빠르게 로딩이 진행되었다

GET /streaming/abc.mkv HTTP/1.1

Host: 127.0.0.1:4242

Accept: */*

Accept-Language: en_US

User-Agent: VLC/3.0.16 LibVLC/3.0.16

Range: bytes=0-

http debug: incoming response:
HTTP/1.1 206 Partial Content

Connection: keep-alive

Content-Type: video/mkv

Content-Length: 4573026409

Date: Wed, 27 Apr 2022 10:56:59 GMT

Content-Range: bytes 0-4573026409/4573026410

Accept-Ranges: bytes

이해가 가지 않아 더 찾아봤는데 Localhost 루프백 주소는 DNS 서버로 보내지 않고 OS 내에서 처리한다고 한다 
OS내에 버그이거나 IPv6으로 가서 실패했다가 IPv4로 가나 싶기도 하고(IPv6사용안함) 정확한 원인은 알 수 없었다

 

한 줄 결론

localhost -> 127.0.0.1


 

728x90