[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