[FFmpeg-trac] #10049(undetermined:new): 404 when playing a DASH
FFmpeg
trac at avcodec.org
Fri Nov 18 12:10:20 EET 2022
#10049: 404 when playing a DASH
-------------------------------------+-------------------------------------
Reporter: | Owner: (none)
changxiangzhong |
Type: defect | Status: new
Priority: normal | Component:
| undetermined
Version: git-master | Resolution:
Keywords: DASH 404 | Blocked By:
Blocking: | Reproduced by developer: 1
Analyzed by developer: 1 |
-------------------------------------+-------------------------------------
Description changed by changxiangzhong:
Old description:
> Summary of the bug:
> FFprobe cannot detect a DASH stream. With the same stream, Players like
> ExoPlayer, MPEG-JS, Bitmovin works fine without any issue.
>
> How to reproduce:
> {{{
> ffprobe_g -loglevel trace
> https://director.livecdn.teliaplay.net/notvm/mso/TV_1HD/dash/manifest.mpd?abs_begin=2022-11-16T08:00:00Z&is_live&no_dolby
> }}}
> Patches should be submitted to the ffmpeg-devel mailing list and not this
> bug tracker.
>
> It complains certain file chunks end up with a 404 error. such as the
> following
>
> {{{
> [dash @ 0x559100d10880] new fragment: min[122164656] max[122164805]
> [dash @ 0x559100d10880] DASH request for url
> 'https://director.livecdn.teliaplay.net/notvm/mso/TV_1HD/dash/video-
> stream-1-150188795682072.mp4', offset 0
> [https @ 0x559100d5bec0] Setting default whitelist
> 'http,https,tls,rtp,tcp,udp,crypto,httpproxy'
> [tcp @ 0x559100d9b940] Original list of addresses:
> [tcp @ 0x559100d9b940] Address 84.208.9.141 port 443
> [tcp @ 0x559100d9b940] Address 84.208.9.75 port 443
> [tcp @ 0x559100d9b940] Address 84.208.9.142 port 443
> [tcp @ 0x559100d9b940] Address 84.208.9.76 port 443
> [tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:3:75 port 443
> [tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:2:75 port 443
> [tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:2:76 port 443
> [tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:3:76 port 443
> [tcp @ 0x559100d9b940] Interleaved list of addresses:
> [tcp @ 0x559100d9b940] Address 84.208.9.141 port 443
> [tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:3:75 port 443
> [tcp @ 0x559100d9b940] Address 84.208.9.75 port 443
> [tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:2:75 port 443
> [tcp @ 0x559100d9b940] Address 84.208.9.142 port 443
> [tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:2:76 port 443
> [tcp @ 0x559100d9b940] Address 84.208.9.76 port 443
> [tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:3:76 port 443
> [tcp @ 0x559100d9b940] Starting connection attempt to 84.208.9.141 port
> 443
> [tcp @ 0x559100d9b940] Successfully connected to 84.208.9.141 port 443
> [https @ 0x559100d5bec0] request: GET /notvm/mso/TV_1HD/dash/video-
> stream-1-150188795682072.mp4 HTTP/1.1
> User-Agent: Lavf/58.76.100
> Accept: */*
> Connection: close
> Host: director.livecdn.teliaplay.net
> Icy-MetaData: 1
>
> [https @ 0x559100d5bec0] header='HTTP/1.1 302 Found'
> [https @ 0x559100d5bec0] http_code=302
> [https @ 0x559100d5bec0] header='Cache-Control: no-store'
> [https @ 0x559100d5bec0] header='Content-Type: text/plain; charset=utf-8'
> [https @ 0x559100d5bec0] header='Location:
> https://m323-cdne01.livecdn.teliaplay.net/notvm/mso/TV_1HD/dash/video-
> stream-1-150188795682072.mp4'
> [https @ 0x559100d5bec0] header='Date: Fri, 18 Nov 2022 09:39:58 GMT'
> [https @ 0x559100d5bec0] header='Content-Length: 0'
> [https @ 0x559100d5bec0] header='Access-Control-Allow-Origin: *'
> [https @ 0x559100d5bec0] header='Age: 0'
> [https @ 0x559100d5bec0] header='Connection: close'
> [https @ 0x559100d5bec0] header=''
> [tcp @ 0x559100d52a80] Original list of addresses:
> [tcp @ 0x559100d52a80] Address 84.208.9.21 port 443
> [tcp @ 0x559100d52a80] Address 2a02:fe0:1:cd1:570:323:2:21 port 443
> [tcp @ 0x559100d52a80] Interleaved list of addresses:
> [tcp @ 0x559100d52a80] Address 84.208.9.21 port 443
> [tcp @ 0x559100d52a80] Address 2a02:fe0:1:cd1:570:323:2:21 port 443
> [tcp @ 0x559100d52a80] Starting connection attempt to 84.208.9.21 port
> 443
> [tcp @ 0x559100d52a80] Successfully connected to 84.208.9.21 port 443
> [https @ 0x559100d5bec0] request: GET /notvm/mso/TV_1HD/dash/video-
> stream-1-150188795682072.mp4 HTTP/1.1
> User-Agent: Lavf/58.76.100
> Accept: */*
> Connection: close
> Host: m323-cdne01.livecdn.teliaplay.net
> Icy-MetaData: 1
>
> [https @ 0x559100d5bec0] header='HTTP/1.1 404 Not Found'
> [https @ 0x559100d5bec0] http_code=404
> [https @ 0x559100d5bec0] HTTP error 404 Not Found
> [dash @ 0x559100d10880] Failed to open fragment of playlist
> }}}
>
> To debug the issue, I've tried both CURL & WGET to download the file
> chunk without any issue
>
> {{{
> chang at my_linux:~/Desktop/fix_ffmpeg_telia$ curl -L 4 -vvv --user-agent
> "Lavf/58.76.100" -H "Connection: close" -H "Icy-MetaData: 1"
> https://director.livecdn.teliaplay.net/notvm/mso/TV_1HD/dash/video-
> stream-1-150188795682072.mp4 --output -
> * Trying 0.0.0.4:80...
> * Immediate connect fail for 0.0.0.4: No route to host
> * Closing connection 0
> curl: (7) Couldn't connect to server
> * Trying 84.208.9.76:443...
> * Connected to director.livecdn.teliaplay.net (84.208.9.76) port 443 (#1)
> * ALPN, offering h2
> * ALPN, offering http/1.1
> * successfully set certificate verify locations:
> * CAfile: /etc/ssl/cert.pem
> * CApath: none
> * (304) (OUT), TLS handshake, Client hello (1):
> * (304) (IN), TLS handshake, Server hello (2):
> * (304) (IN), TLS handshake, Unknown (8):
> * (304) (IN), TLS handshake, Certificate (11):
> * (304) (IN), TLS handshake, CERT verify (15):
> * (304) (IN), TLS handshake, Finished (20):
> * (304) (OUT), TLS handshake, Finished (20):
> * SSL connection using TLSv1.3 / AEAD-AES128-GCM-SHA256
> * ALPN, server accepted to use h2
> * Server certificate:
> * subject: C=SE; L=SOLNA; O=Telia Company AB; CN=*.livecdn.teliaplay.net
> * start date: Feb 9 06:41:47 2022 GMT
> * expire date: Feb 9 06:41:47 2023 GMT
> * subjectAltName: host "director.livecdn.teliaplay.net" matched cert's
> "*.livecdn.teliaplay.net"
> * issuer: C=FI; O=TeliaSonera; CN=TeliaSonera Server CA v2
> * SSL certificate verify ok.
> * Using HTTP2, server supports multiplexing
> * Connection state changed (HTTP/2 confirmed)
> * Copying HTTP/2 data in stream buffer to connection buffer after
> upgrade: len=0
> * Using Stream ID: 1 (easy handle 0x128008c00)
> > GET /notvm/mso/TV_1HD/dash/video-stream-1-150188795682072.mp4 HTTP/2
> > Host: director.livecdn.teliaplay.net
> > user-agent: Lavf/58.76.100
> > accept: */*
> > connection: close
> > icy-metadata: 1
> >
> < HTTP/2 302
> < cache-control: no-store
> < content-type: text/plain; charset=utf-8
> < location:
> https://m323-cdne01.livecdn.teliaplay.net/notvm/mso/TV_1HD/dash/video-
> stream-1-150188795682072.mp4
> < date: Fri, 18 Nov 2022 09:45:25 GMT
> < content-length: 0
> < access-control-allow-origin: *
> < age: 0
> <
> * Connection #1 to host director.livecdn.teliaplay.net left intact
> * Issue another request to this URL:
> 'https://m323-cdne01.livecdn.teliaplay.net/notvm/mso/TV_1HD/dash/video-
> stream-1-150188795682072.mp4'
> * Trying 84.208.9.21:443...
> * Connected to m323-cdne01.livecdn.teliaplay.net (84.208.9.21) port 443
> (#2)
> * ALPN, offering h2
> * ALPN, offering http/1.1
> * successfully set certificate verify locations:
> * CAfile: /etc/ssl/cert.pem
> * CApath: none
> * (304) (OUT), TLS handshake, Client hello (1):
> * (304) (IN), TLS handshake, Server hello (2):
> * (304) (IN), TLS handshake, Unknown (8):
> * (304) (IN), TLS handshake, Certificate (11):
> * (304) (IN), TLS handshake, CERT verify (15):
> * (304) (IN), TLS handshake, Finished (20):
> * (304) (OUT), TLS handshake, Finished (20):
> * SSL connection using TLSv1.3 / AEAD-AES128-GCM-SHA256
> * ALPN, server accepted to use h2
> * Server certificate:
> * subject: C=SE; L=SOLNA; O=Telia Company AB; CN=*.livecdn.teliaplay.net
> * start date: Feb 9 06:41:47 2022 GMT
> * expire date: Feb 9 06:41:47 2023 GMT
> * subjectAltName: host "m323-cdne01.livecdn.teliaplay.net" matched
> cert's "*.livecdn.teliaplay.net"
> * issuer: C=FI; O=TeliaSonera; CN=TeliaSonera Server CA v2
> * SSL certificate verify ok.
> * Using HTTP2, server supports multiplexing
> * Connection state changed (HTTP/2 confirmed)
> * Copying HTTP/2 data in stream buffer to connection buffer after
> upgrade: len=0
> * Using Stream ID: 1 (easy handle 0x128008c00)
> > GET /notvm/mso/TV_1HD/dash/video-stream-1-150188795682072.mp4 HTTP/2
> > Host: m323-cdne01.livecdn.teliaplay.net
> > user-agent: Lavf/58.76.100
> > accept: */*
> > connection: close
> > icy-metadata: 1
> >
> < HTTP/2 200
> < cache-control: public, max-age=7200
> < content-length: 1168457
> < content-type: video/mp4
> < date: Fri, 18 Nov 2022 09:40:00 GMT
> < etag: "2022-11-18T09:39:58.480"
> < last-modified: Fri, 18 Nov 2022 09:39:58 GMT
> < last-modified-milliseconds: Fri, 18 Nov 2022 09:39:58.480 GMT
> < origin-instance: so-service-02
> < access-control-allow-origin: *
> < age: 324
> < accept-ranges: bytes
> <
> Warning: Binary output can mess up your terminal. Use "--output -" to
> tell
> Warning: curl to output it to your terminal anyway, or consider "--output
> Warning: <FILE>" to save to a file.
> * Failure writing output to destination
> * stopped the pause stream!
> * Connection #2 to host m323-cdne01.livecdn.teliaplay.net left intact
> }}}
>
> I've already tweak the CURL command to send additional headers just like
> ffprobe. But CURL still works as expected.
New description:
Summary of the bug:
FFprobe cannot detect a DASH stream. With the same stream, Players like
ExoPlayer, MPEG-JS, Bitmovin works fine without any issue.
How to reproduce:
{{{
ffprobe_g -loglevel trace
https://director.livecdn.teliaplay.net/notvm/mso/TV_1HD/dash/manifest.mpd?abs_begin=2022-11-16T08:00:00Z&is_live&no_dolby
}}}
It complains certain file chunks end up with a 404 error. such as the
following
{{{
[dash @ 0x559100d10880] new fragment: min[122164656] max[122164805]
[dash @ 0x559100d10880] DASH request for url
'https://director.livecdn.teliaplay.net/notvm/mso/TV_1HD/dash/video-
stream-1-150188795682072.mp4', offset 0
[https @ 0x559100d5bec0] Setting default whitelist
'http,https,tls,rtp,tcp,udp,crypto,httpproxy'
[tcp @ 0x559100d9b940] Original list of addresses:
[tcp @ 0x559100d9b940] Address 84.208.9.141 port 443
[tcp @ 0x559100d9b940] Address 84.208.9.75 port 443
[tcp @ 0x559100d9b940] Address 84.208.9.142 port 443
[tcp @ 0x559100d9b940] Address 84.208.9.76 port 443
[tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:3:75 port 443
[tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:2:75 port 443
[tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:2:76 port 443
[tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:3:76 port 443
[tcp @ 0x559100d9b940] Interleaved list of addresses:
[tcp @ 0x559100d9b940] Address 84.208.9.141 port 443
[tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:3:75 port 443
[tcp @ 0x559100d9b940] Address 84.208.9.75 port 443
[tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:2:75 port 443
[tcp @ 0x559100d9b940] Address 84.208.9.142 port 443
[tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:2:76 port 443
[tcp @ 0x559100d9b940] Address 84.208.9.76 port 443
[tcp @ 0x559100d9b940] Address 2a02:fe0:1:cd1:570:323:3:76 port 443
[tcp @ 0x559100d9b940] Starting connection attempt to 84.208.9.141 port
443
[tcp @ 0x559100d9b940] Successfully connected to 84.208.9.141 port 443
[https @ 0x559100d5bec0] request: GET /notvm/mso/TV_1HD/dash/video-
stream-1-150188795682072.mp4 HTTP/1.1
User-Agent: Lavf/58.76.100
Accept: */*
Connection: close
Host: director.livecdn.teliaplay.net
Icy-MetaData: 1
[https @ 0x559100d5bec0] header='HTTP/1.1 302 Found'
[https @ 0x559100d5bec0] http_code=302
[https @ 0x559100d5bec0] header='Cache-Control: no-store'
[https @ 0x559100d5bec0] header='Content-Type: text/plain; charset=utf-8'
[https @ 0x559100d5bec0] header='Location:
https://m323-cdne01.livecdn.teliaplay.net/notvm/mso/TV_1HD/dash/video-
stream-1-150188795682072.mp4'
[https @ 0x559100d5bec0] header='Date: Fri, 18 Nov 2022 09:39:58 GMT'
[https @ 0x559100d5bec0] header='Content-Length: 0'
[https @ 0x559100d5bec0] header='Access-Control-Allow-Origin: *'
[https @ 0x559100d5bec0] header='Age: 0'
[https @ 0x559100d5bec0] header='Connection: close'
[https @ 0x559100d5bec0] header=''
[tcp @ 0x559100d52a80] Original list of addresses:
[tcp @ 0x559100d52a80] Address 84.208.9.21 port 443
[tcp @ 0x559100d52a80] Address 2a02:fe0:1:cd1:570:323:2:21 port 443
[tcp @ 0x559100d52a80] Interleaved list of addresses:
[tcp @ 0x559100d52a80] Address 84.208.9.21 port 443
[tcp @ 0x559100d52a80] Address 2a02:fe0:1:cd1:570:323:2:21 port 443
[tcp @ 0x559100d52a80] Starting connection attempt to 84.208.9.21 port 443
[tcp @ 0x559100d52a80] Successfully connected to 84.208.9.21 port 443
[https @ 0x559100d5bec0] request: GET /notvm/mso/TV_1HD/dash/video-
stream-1-150188795682072.mp4 HTTP/1.1
User-Agent: Lavf/58.76.100
Accept: */*
Connection: close
Host: m323-cdne01.livecdn.teliaplay.net
Icy-MetaData: 1
[https @ 0x559100d5bec0] header='HTTP/1.1 404 Not Found'
[https @ 0x559100d5bec0] http_code=404
[https @ 0x559100d5bec0] HTTP error 404 Not Found
[dash @ 0x559100d10880] Failed to open fragment of playlist
}}}
To debug the issue, I've tried both CURL & WGET to download the file chunk
without any issue
{{{
chang at my_linux:~/Desktop/fix_ffmpeg_telia$ curl -L 4 -vvv --user-agent
"Lavf/58.76.100" -H "Connection: close" -H "Icy-MetaData: 1"
https://director.livecdn.teliaplay.net/notvm/mso/TV_1HD/dash/video-
stream-1-150188795682072.mp4 --output -
* Trying 0.0.0.4:80...
* Immediate connect fail for 0.0.0.4: No route to host
* Closing connection 0
curl: (7) Couldn't connect to server
* Trying 84.208.9.76:443...
* Connected to director.livecdn.teliaplay.net (84.208.9.76) port 443 (#1)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/cert.pem
* CApath: none
* (304) (OUT), TLS handshake, Client hello (1):
* (304) (IN), TLS handshake, Server hello (2):
* (304) (IN), TLS handshake, Unknown (8):
* (304) (IN), TLS handshake, Certificate (11):
* (304) (IN), TLS handshake, CERT verify (15):
* (304) (IN), TLS handshake, Finished (20):
* (304) (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / AEAD-AES128-GCM-SHA256
* ALPN, server accepted to use h2
* Server certificate:
* subject: C=SE; L=SOLNA; O=Telia Company AB; CN=*.livecdn.teliaplay.net
* start date: Feb 9 06:41:47 2022 GMT
* expire date: Feb 9 06:41:47 2023 GMT
* subjectAltName: host "director.livecdn.teliaplay.net" matched cert's
"*.livecdn.teliaplay.net"
* issuer: C=FI; O=TeliaSonera; CN=TeliaSonera Server CA v2
* SSL certificate verify ok.
* Using HTTP2, server supports multiplexing
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade:
len=0
* Using Stream ID: 1 (easy handle 0x128008c00)
> GET /notvm/mso/TV_1HD/dash/video-stream-1-150188795682072.mp4 HTTP/2
> Host: director.livecdn.teliaplay.net
> user-agent: Lavf/58.76.100
> accept: */*
> connection: close
> icy-metadata: 1
>
< HTTP/2 302
< cache-control: no-store
< content-type: text/plain; charset=utf-8
< location:
https://m323-cdne01.livecdn.teliaplay.net/notvm/mso/TV_1HD/dash/video-
stream-1-150188795682072.mp4
< date: Fri, 18 Nov 2022 09:45:25 GMT
< content-length: 0
< access-control-allow-origin: *
< age: 0
<
* Connection #1 to host director.livecdn.teliaplay.net left intact
* Issue another request to this URL:
'https://m323-cdne01.livecdn.teliaplay.net/notvm/mso/TV_1HD/dash/video-
stream-1-150188795682072.mp4'
* Trying 84.208.9.21:443...
* Connected to m323-cdne01.livecdn.teliaplay.net (84.208.9.21) port 443
(#2)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/cert.pem
* CApath: none
* (304) (OUT), TLS handshake, Client hello (1):
* (304) (IN), TLS handshake, Server hello (2):
* (304) (IN), TLS handshake, Unknown (8):
* (304) (IN), TLS handshake, Certificate (11):
* (304) (IN), TLS handshake, CERT verify (15):
* (304) (IN), TLS handshake, Finished (20):
* (304) (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / AEAD-AES128-GCM-SHA256
* ALPN, server accepted to use h2
* Server certificate:
* subject: C=SE; L=SOLNA; O=Telia Company AB; CN=*.livecdn.teliaplay.net
* start date: Feb 9 06:41:47 2022 GMT
* expire date: Feb 9 06:41:47 2023 GMT
* subjectAltName: host "m323-cdne01.livecdn.teliaplay.net" matched cert's
"*.livecdn.teliaplay.net"
* issuer: C=FI; O=TeliaSonera; CN=TeliaSonera Server CA v2
* SSL certificate verify ok.
* Using HTTP2, server supports multiplexing
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade:
len=0
* Using Stream ID: 1 (easy handle 0x128008c00)
> GET /notvm/mso/TV_1HD/dash/video-stream-1-150188795682072.mp4 HTTP/2
> Host: m323-cdne01.livecdn.teliaplay.net
> user-agent: Lavf/58.76.100
> accept: */*
> connection: close
> icy-metadata: 1
>
< HTTP/2 200
< cache-control: public, max-age=7200
< content-length: 1168457
< content-type: video/mp4
< date: Fri, 18 Nov 2022 09:40:00 GMT
< etag: "2022-11-18T09:39:58.480"
< last-modified: Fri, 18 Nov 2022 09:39:58 GMT
< last-modified-milliseconds: Fri, 18 Nov 2022 09:39:58.480 GMT
< origin-instance: so-service-02
< access-control-allow-origin: *
< age: 324
< accept-ranges: bytes
<
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.
* Failure writing output to destination
* stopped the pause stream!
* Connection #2 to host m323-cdne01.livecdn.teliaplay.net left intact
}}}
I've already tweak the CURL command to send additional headers just like
ffprobe. But CURL still works as expected.
Update 1
I've also tried with the same dash stream url without any parameters.
Result remains the same - it works with dash.js, exoplayer and bitmovin.
But not ffmpeg (master branch)
{{{https://director.livecdn.teliaplay.net/notvm/mso/TV_1HD/dash/manifest.mpd}}}
--
--
Ticket URL: <https://trac.ffmpeg.org/ticket/10049#comment:1>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list