IBBoard / cawbird

A fork of the Corebird GTK Twitter client that continues to work with Twitter
https://ibboard.co.uk/cawbird/
GNU General Public License v3.0
309 stars 37 forks source link

Error playing video #338

Closed philipzae closed 3 years ago

philipzae commented 3 years ago

Got this error when trying to play the video in this tweet. https://twitter.com/zamundata/status/1369899185751928834 image

IBBoard commented 3 years ago

Looking at the logs, we get:


(cawbird:5839): cawbird-CRITICAL **: 14:24:46.384: ../ext/soup/gstsouphttpsrc.c(1431): gst_soup_http_src_parse_status (): /GstPlayBin:video/GstURIDecodeBin:uridecodebin0/GstSoupHTTPSrc:source:
Not Found (404), URL: https://video.twimg.com/ext_tw_video/1369800139439824907/pu/pl/MkmkumJVf43dSAx3.m3u8?tag=12&container=fmp4, Redirect to: (NULL)

(cawbird:5839): cawbird-CRITICAL **: 14:24:46.385: ../libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop (): /GstPlayBin:video/GstURIDecodeBin:uridecodebin0/GstSoupHTTPSrc:source:
streaming stopped, reason error (-5)

(cawbird:5839): cawbird-CRITICAL **: 14:24:46.385: ../plugins/elements/gsttypefindelement.c(987): gst_type_find_element_chain_do_typefinding (): /GstPlayBin:video/GstURIDecodeBin:uridecodebin0/GstTypeFindElement:typefindelement0:
Can't typefind stream

Checking the JSON, that tweet has:

…
          "variants" : [
            {
              "content_type" : "application/x-mpegURL",
              "url" : "https://video.twimg.com/ext_tw_video/1369800139439824907/pu/pl/MkmkumJVf43dSAx3.m3u8?tag=12&container=fmp4"
            },
            {
              "bitrate" : 632000,
              "content_type" : "video/mp4",
              "url" : "https://video.twimg.com/ext_tw_video/1369800139439824907/pu/vid/324x408/jpSIjxWaxRfIMfZz.mp4?tag=12"
            }
          ]
…

I think this is going to be a URL encoding problem. Again.

IBBoard commented 3 years ago

@j1warren has reported a repeat of this in #384 with https://twitter.com/kola_kolz/status/1402890428601540608

I've just checked the JSON for that tweet. The video options are:

              {
                "bitrate" : 950000,
                "content_type" : "video/mp4",
                "url" : "https://video.twimg.com/ext_tw_video/1402890234602344448/pu/vid/480x624/XbEyjIQGn0qE5DmT.mp4?tag=12"
              },
              {
                "bitrate" : 632000,
                "content_type" : "video/mp4",
                "url" : "https://video.twimg.com/ext_tw_video/1402890234602344448/pu/vid/320x416/16GjmZoyPhBEH27g.mp4?tag=12"
              },
              {
                "content_type" : "application/x-mpegURL",
                "url" : "https://video.twimg.com/ext_tw_video/1402890234602344448/pu/pl/U_bT0EuSzMm5JbAe.m3u8?tag=12&container=fmp4"
              }

Cawbird will load the last one because its type is application/x-mpegURL. The ampersand was breaking it until I fixed this bug, and that fix has been released since v1.4.

To debug this more we need to see what GStreamer is doing and whether it is consistent. What do you get when you run gst-play-1.0 "https://video.twimg.com/ext_tw_video/1402890234602344448/pu/pl/U_bT0EuSzMm5JbAe.m3u8?tag=12&container=fmp4"?

j1warren commented 3 years ago

Trying to play this video again can display different error messages. Some appear and change, the latest are either

gstdecodebin2.c(4694): gst_decode_bin_expose (): /GstPlayBin:video/GstURIDecodeBin:uridecodebin11/GstDecodeBin:decodebin11: all streams without buffers

or

gstvideodecoder.c(1138): gst_video_decoder_sink_event_default (): /GstPlayBin:video/GstURIDecodeBin:uridecodebin7/GstDecodeBin:decodebin7/avdec_mpeg2video:avdec_mpeg2video3: no valid frames found

in cli

$ gst-play-1.0 "https://video.twimg.com/ext_tw_video/1402890234602344448/pu/pl/U_bT0EuSzMm5JbAe.m3u8?tag=12&container=fmp4" Press 'k' to see a list of keyboard shortcuts. Now playing https://video.twimg.com/ext_tw_video/1402890234602344448/pu/pl/U_bT0EuSzMm5JbAe.m3u8?tag=12&container=fmp4 ERROR Could not determine type of stream for https://video.twimg.com/ext_tw_video/1402890234602344448/pu/pl/U_bT0EuSzMm5JbAe.m3u8?tag=12&container=fmp4 ERROR debug information: gsthlsdemux.c(840): gst_hls_demux_handle_buffer (): /GstPlayBin:playbin/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstHLSDemux:hlsdemux0 Reached end of play list.

$ curl "https://video.twimg.com/ext_tw_video/1402890234602344448/pu/pl/U_bT0EuSzMm5JbAe.m3u8?tag=12&container=fmp4"

EXTM3U

EXT-X-VERSION:6

EXT-X-INDEPENDENT-SEGMENTS

EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=632000,BANDWIDTH=632000,RESOLUTION=320x416,CODECS="mp4a.40.2,avc1.4d001e"

/ext_tw_video/1402890234602344448/pu/pl/320x416/rz8wD6fuvjsW1-sx.m3u8?container=fmp4

EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=950000,BANDWIDTH=950000,RESOLUTION=480x624,CODECS="mp4a.40.2,avc1.4d001f"

/ext_tw_video/1402890234602344448/pu/pl/480x624/1aMIbbGS3f38Y_0S.m3u8?container=fmp4

IBBoard commented 3 years ago

If gst-play can't play it then the problem is with your GStreamer install and not anything that Cawbird can do anything about. If it's intermittent then my best guess is either network problems corrupting the stream or you're hitting different Twitter servers each time and they give slightly different performance.

[Edit] Also, depending on your GStreamer version, it might be the hlsdemux issue that's mentioned in our "known issues" section and fixed in GStreamer 1.18.2

j1warren commented 3 years ago

it might be the hlsdemux issue that's mentioned in our "known issues" section and fixed in GStreamer 1.18.2

Could be. Opening the tweet in a browser works.

IBBoard commented 3 years ago

Firefox has its own MPEG libraries, so if Firefox works but gst-play and Cawbird don't then it's definitely a GStreamer problem. I'm not sure what Chrome uses.