Skip to content
  • Thibault Saunier's avatar
    playbin: Handle error message with redirection indication · 494ee674
    Thibault Saunier authored and Thibault Saunier's avatar Thibault Saunier committed
    There are in the wild (mp4) streams that basically contain no tracks
    but do have a redirect info[0], in which case, qtdemux won't be able
    to expose any pad (there are no tracks) so can't post anything but
    an error on the bus, as:
      - it can't send EOS downstream, it has no pad,
      - posting an EOS message will be useless as PAUSED state can't be
        reached and there is no sink in the pipeline meaning GstBin will
        simply ignore it
    
    In that case, currently the application could try to handle that but it
    is pretty complex as it will get the REDIRECT message on the bus at
    which point it could set the URL but playbin will ignore it, as
    it will only be for the next EOS, it thus need to set the pipeline to
    NULL (READY won't do as it is already in READY at that point). And it
    needs to figure out the following ERROR message on the bus needs to be
    ignored, which is not really simple.
    
    The approach here is to allow element to add details to the ERROR
    message with a `redirect-location` field which elements like playbin handle
    and use right away.
    
    We could also use the element 'redirect' message in playbin, but the
    issue with that approach is that the element will still emit the ERROR
    message on the bus, leading to wrong behaviour. That can't be avoided
    since in the case the app/parent pipeline is not handling the redirect
    instruction, the ERROR message is necessary (and there is no way to
    detect that the message has been "handled" from the element emitting the
    redirect).
    
    [0]: http://movietrailers.apple.com/movies/paramount/terminator-dark-fate/terminator-dark-fate-trailer-2_480p.mov
    494ee674