Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Webkit green screen on first video #2

Open
opensourcecheemsburgers opened this issue Jan 26, 2024 · 11 comments
Open

Webkit green screen on first video #2

opensourcecheemsburgers opened this issue Jan 26, 2024 · 11 comments
Labels
bug Something isn't working

Comments

@opensourcecheemsburgers
Copy link
Owner

Webkit-based browsers have a green screen when playing the first video after opening RustyTube.

The audio still plays fine and it is easily fixed by changing formats.

@opensourcecheemsburgers opensourcecheemsburgers added the bug Something isn't working label Jan 26, 2024
@philn
Copy link

philn commented Jan 29, 2024

On which platform is this happening? Linux I guess?

I can reproduce the issue with org.gnome.Epiphany.Devel which ships with openh264dec by default, which is known to be very buggy...

The Epiphany.Devel runtime includes gstva though, which is a plugin allowing hardware-accelerated encode/decode on Intel and AMD GPU. It's disabled though, so you need to enable decoders one by one, with this env var: GST_PLUGIN_FEATURE_RANK=vah264dec:max,vavp9dec:max ...

With the VA decoder the output is black in Epiphany.Devel ;) But in Canary it renders fine.

You can check which decoder is used with this env var: GST_DEBUG=videodecoder:5.

@opensourcecheemsburgers
Copy link
Owner Author

Yeah, it is happening in both Epiphany and in the Linux Tauri app which uses webkit2gtk-rs.

Why is webkit so bad? Oh right, Apple...

Anyways, I'll take a closer look tomorrow :)

@philn
Copy link

philn commented Jan 30, 2024

Apple has nothing to do about this.

@opensourcecheemsburgers
Copy link
Owner Author

Fair point, the webkit and webkit2gtk/linux issues are just very cumbersome.

Checking the decoder, it gives avdec_h264.

Using the following command still does not fix the issue:

export GST_DEBUG=videodecoder:5 && export GST_PLUGIN_FEATURE_RANK=avdec_h264,avdec_h265,avdec_vp9 && cargo tauri dev

Note: I added the others, because Youtube also uses those too.

@philn
Copy link

philn commented Feb 2, 2024

The syntax you used is incorrect and i wasn't asking about avdec but va.

@opensourcecheemsburgers
Copy link
Owner Author

Using the following also still gives a green screen:

export GST_PLUGIN_FEATURE_RANK=vah264dec:max,vavp9dec:max && cargo tauri dev

@philn
Copy link

philn commented Feb 2, 2024

Maybe you don't have those decoders? gst-inspect-1.0 vah264dec shows anything?

@opensourcecheemsburgers
Copy link
Owner Author

That might be the issue:

No such element or plugin 'vah264dec'

@opensourcecheemsburgers
Copy link
Owner Author

After installing gst-plugin-va via yay -S gst-plugin-va and doing a cargo clean, it still gives a green screen.

The result of gst-inspect-1.0 vah264dec is:

Factory Details:
  Rank                     none (0)
  Long-name                VA-API H.264 Decoder
  Klass                    Codec/Decoder/Video/Hardware
  Description              VA-API based H.264 video decoder
  Author                   Víctor Jáquez <[email protected]>
  Documentation            https://gstreamer.freedesktop.org/documentation/va/vah264dec.html

Plugin Details:
  Name                     va
  Description              VA-API codecs plugin
  Filename                 /usr/lib/gstreamer-1.0/libgstva.so
  Version                  1.22.9
  License                  LGPL
  Source module            gst-plugins-bad
  Documentation            https://gstreamer.freedesktop.org/documentation/va/
  Source release date      2024-01-24
  Binary package           Arch Linux gst-plugins-bad 1.22.9-2
  Origin URL               https://www.archlinux.org/

GObject
 +----GInitiallyUnowned
       +----GstObject
             +----GstElement
                   +----GstVideoDecoder
                         +----GstH264Decoder
                               +----GstVaH264Dec

Pad Templates:
  SINK template: 'sink'
    Availability: Always
    Capabilities:
      video/x-h264
                profile: { (string)constrained-baseline, (string)baseline, (string)main, (string)high, (string)progressive-high, (string)constrained-high }
                  width: [ 1, 4096 ]
                 height: [ 1, 4096 ]
              alignment: au
          stream-format: { (string)avc, (string)avc3, (string)byte-stream }
  
  SRC template: 'src'
    Availability: Always
    Capabilities:
      video/x-raw(memory:VAMemory)
                  width: [ 64, 4096 ]
                 height: [ 64, 4096 ]
                 format: NV12
      video/x-raw(memory:DMABuf)
                  width: [ 64, 4096 ]
                 height: [ 64, 4096 ]
                 format: NV12
      video/x-raw
                  width: [ 64, 4096 ]
                 height: [ 64, 4096 ]
                 format: NV12

Element has no clocking capabilities.
Element has no URI handling capabilities.

Pads:
  SINK: 'sink'
    Pad Template: 'sink'
  SRC: 'src'
    Pad Template: 'src'

Element Properties:

  automatic-request-sync-point-flags: Flags to use when automatically requesting sync points
                        flags: readable, writable
                        Flags "GstVideoDecoderRequestSyncPointFlags" Default: 0x00000003, "corrupt-output+discard-input"
                           (0x00000001): discard-input    - GST_VIDEO_DECODER_REQUEST_SYNC_POINT_DISCARD_INPUT
                           (0x00000002): corrupt-output   - GST_VIDEO_DECODER_REQUEST_SYNC_POINT_CORRUPT_OUTPUT
  
  automatic-request-sync-points: Automatically request sync points when it would be useful
                        flags: readable, writable
                        Boolean. Default: false
  
  compliance          : The decoder's behavior in compliance with the h264 spec.
                        flags: readable, writable
                        Enum "GstH264DecoderCompliance" Default: 0, "auto"
                           (0): auto             - GST_H264_DECODER_COMPLIANCE_AUTO
                           (1): strict           - GST_H264_DECODER_COMPLIANCE_STRICT
                           (2): normal           - GST_H264_DECODER_COMPLIANCE_NORMAL
                           (3): flexible         - GST_H264_DECODER_COMPLIANCE_FLEXIBLE
  
  device-path         : DRM device path
                        flags: readable
                        String. Default: null
  
  discard-corrupted-frames: Discard frames marked as corrupted instead of outputting them
                        flags: readable, writable
                        Boolean. Default: false
  
  max-errors          : Max consecutive decoder errors before returning flow error
                        flags: readable, writable
                        Integer. Range: -1 - 2147483647 Default: -1 
  
  min-force-key-unit-interval: Minimum interval between force-keyunit requests in nanoseconds
                        flags: readable, writable
                        Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0 
  
  name                : The name of the object
                        flags: readable, writable
                        String. Default: "vah264dec0"
  
  parent              : The parent of the object
                        flags: readable, writable
                        Object of type "GstObject"
  
  qos                 : Handle Quality-of-Service events from downstream
                        flags: readable, writable
                        Boolean. Default: true
  

@philn
Copy link

philn commented Feb 2, 2024

Is this env var set? GST_PLUGIN_FEATURE_RANK=vah264dec:max,vavp9dec:max ?

@opensourcecheemsburgers
Copy link
Owner Author

Yep, I checked the environment vars using:

$ env

It gives:

GST_PLUGIN_FEATURE_RANK=vah264dec:max,vavp9dec:max
// other env vars 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants