FDH2 / UxPlay

AirPlay Unix mirroring server
GNU General Public License v3.0
1.35k stars 72 forks source link

green screen bug still present in ubuntu, e.g. 21.10 #38

Closed arararar closed 2 years ago

arararar commented 2 years ago

From my ipad, theres still the green screen bug present in uxplay under ubuntu. (debian is ok) It could still be fixed as desribed here: https://github.com/FD-/RPiPlay/issues/202

Perhaps you can "integrate" this case in the "renderers/video_renderer_gstreamer.c" file, so its automatically corrected when compiled under ubuntu? @fduncanh

fduncanh commented 2 years ago

which version of ubuntu? on 20.04 things are working fine, as far as I can see.

fduncanh commented 2 years ago

line 115-116 of renderers/video_renderer_gstreamer.c please first find out if your suggested change actually fixes your problem.

GString *launch = g_string_new("appsrc name=video_source stream-type=0 format=GST_FORMAT_TIME is-live=true !" "queue ! decodebin ! videoconvert ! ");

arararar commented 2 years ago

Yes, with that fix it works fine in ubuntu 21.10 (gstreamerpluginsbad also installed, as suggested).

arararar commented 2 years ago

But i am not sure, if it can be achieved that only ubuntu gets this patch?

fduncanh commented 2 years ago

the change decodebin -> h264parse ! avdec_h264 is now committed; only h264 video is streamed by AirPlay, so using decodebin to identify the video format is unneeded.

removing `videoconvert is a mistake though; if it is not needed it does nothing, but not having it will break some videosinks.

@arararar please test

arararar commented 2 years ago

please forgive me for reopen this thread again:

conclusion: DEBIAN works with "decodebin" UBUNTU works with "h264parse ! avdec_h264"

in line 115-116 of renderers/video_renderer_gstreamer.c

fduncanh commented 2 years ago

(You need to "reopen issue" to make it visible.)

  1. debian stretch is soon out of long-term-support

  2. There is no problem on current Debian 11.2 or Ubuntu 21.10 that I can see. I'm installing Debian 9 (stretch) on a spare partition on an old computer, and will take a look.
    You may be missing some gstreamer plugin. (plugins-bad?)

  3. To debug Gstreamer set the environment variable export GST_DEBUG=2 This will show you which plugins autovideosink has chosen for you. see if uxplay -vs ximagesink or uxplay -vs xvimagesink fixes your issue.

  4. One cant make releases "for ubuntu 21.10" or "for debian 9", they all should work.

I guess you have tried out the support for AirMyPc; was it useful for you?
(From fixing this, by discovering the older form of the protocol, I learned how older iPads/iPhones etc that cannot be updated beyond iOS 9 or 10 because they are 32bit can be supported too, in case that is useful for anyone.)

(Airmypc protocol is older, with two changes; iOS9 and 10 has only one of the changes, relative to the legacy iOS12 protocol used by UxPlay)

fduncanh commented 2 years ago

I couldnt get acceptable performance on debian stretch, its too old for me to support, and basically it shouldnt be used any more. (It has 6month left of long-term support). After some work to get libplist-2.0 (from debian 10 buster) and open-ssl 1.1.1 (compiled from source) I got it working. Autovideosink chooses glimagesink instead of ximagesink.

I got somewhat OK results with ... ! h264parse ! decodebin ! videoconvert ! .... and uxplay -vs ximagesink.

I also cannot reproduce your "green screen" with ubuntu-21.10 so I shouldn't have accepted your suggested fix. I would suggest .... ! h264parse ! decodebin ! videoconvert ! ....

"decodebin" ought to just select "avdec_h264" unless it is missing and I see no difference between the two with gstreamer1.16 or 1.18 but stretch uses 1.8.

please let me know if the change ... ! h264parse ! avdec_h264 ! videoconvert ! ... to ... ! h264parse ! decodebin ! videoconvert ! works for you both in debian9 stretch and ubuntu-21-10 (the h264parse is left in place)

If not, describe the issue with ubuntu-21-10 more carefully. Does the window title give the server name or is it "OpenGL renderer"_?

fduncanh commented 2 years ago

What is a "green window"?

fduncanh commented 2 years ago

works fine with Debian 10 on a AMD computer (once the gstreamer1.0-plugin-vaapi was uninstalled) also with Debian 11.2 on an Intel computer with NVIDIA graphics. I suspect your problem on Debian 9 "stretch" may be due to have the VAAPI plugin installed(?). Debian 9 is too old to try to support, so if "decodebin" works for you, just edit video_renderers_gstreamer.c for your setup.

(Its time to upgrade from "stretch", it is nearing end of LTS support.)

fduncanh commented 2 years ago

@arararar

I reverted your avdec_h264 fix in uxplay-1.46 (on master, not yet a release). That fix suppresses hardware decoding by the vaapi plugin. There is instead now an option -avdec to force software h264 decoding by libav. (replaces decodebin by h264_parse ! avdec_h264 ) Presumably this will fix the "green screen".

(aside: was geting AirMyPC to work with uxplay in fact useful to you in the end?)

arararar commented 2 years ago

Ok by me, concerning -avdec!

Yes, airmypc now works for all my collegues using windows as operating system, thank you very! much for your endurance in looking into this matter. I still feel obliged to offer you a coffee-contribution via PayPal, look into my email i sent to you a few weeks ago :)!