mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +09:00
use gst_macos fix for "Official" GStreamer >= 1.22 packages
This commit is contained in:
@@ -42,6 +42,11 @@ add_subdirectory( lib/playfair )
|
||||
add_subdirectory( lib )
|
||||
add_subdirectory( renderers )
|
||||
|
||||
if ( GST_MACOS )
|
||||
add_definitions( -DGST_MACOS )
|
||||
message ( STATUS "define GST_MACOS" )
|
||||
endif()
|
||||
|
||||
add_executable( uxplay uxplay.cpp )
|
||||
target_link_libraries( uxplay
|
||||
renderers
|
||||
|
||||
57
README.html
57
README.html
@@ -652,15 +652,12 @@ should <strong>not</strong> install (or should uninstall) the GStreamer
|
||||
supplied by their package manager, if they use the “official”
|
||||
release.</p>
|
||||
<ul>
|
||||
<li><strong>ADDED 2023-01-25: in the current 1.22.x releases something
|
||||
in the GStreamer macOS binaries appears to not be working (UxPlay starts
|
||||
receiving the AirPlay stream, but the video window does not
|
||||
open)</strong>. If you have this problem, use the older GStreamer-1.20.7
|
||||
binary packages until a fix is found. <em>You could instead compile the
|
||||
“official” GStreamer-1.22.x release from source: GStreamer-1.22.0 has
|
||||
been successfully built this way on a system using MacPorts: see</em> <a
|
||||
href="https://github.com/FDH2/UxPlay/wiki/Building-GStreamer-from-Source-on-macOS-with-MacPorts">the
|
||||
UxPlay Wiki</a>.</li>
|
||||
<li>Since GStreamer v1.22, the “Official” (gstreamer.freedesktop.org)
|
||||
macOS binaries require a wrapper “gst_macos_main” around the actual main
|
||||
program (uxplay). This should have been applied during the UxPlay
|
||||
compilation process, and the initial UxPlay terminal message should
|
||||
confirm it is being used. (UxPlay can also be built using “Official”
|
||||
GStreamer v.1.20.7 binaries, which work without the wrapper.)</li>
|
||||
</ul>
|
||||
<p><strong>Using Homebrew’s GStreamer</strong>: pkg-config is needed:
|
||||
(“brew install pkg-config gstreamer”). This causes a large number of
|
||||
@@ -676,10 +673,27 @@ any extra non-Homebrew plugins (that you build yourself) there, and
|
||||
instead set GST_PLUGIN_PATH to point to their location (Homebrew does
|
||||
not supply a complete GStreamer, but seems to have everything needed for
|
||||
UxPlay).</p>
|
||||
<p>Finally, build and install uxplay: open a terminal and change into
|
||||
the UxPlay source directory (“UxPlay-master” for zipfile downloads,
|
||||
“UxPlay” for “git clone” downloads) and build/install with “cmake . ;
|
||||
make ; sudo make install” (same as for Linux).</p>
|
||||
<p><strong>Using GStreamer installed from MacPorts</strong>: this is
|
||||
<strong>not</strong> recommended, as currently the MacPorts GStreamer is
|
||||
old (v1.16.2), unmaintained, and built to use X11:</p>
|
||||
<ul>
|
||||
<li>Instead <a
|
||||
href="https://github.com/FDH2/UxPlay/wiki/Building-GStreamer-from-Source-on-macOS-with-MacPorts">build
|
||||
gstreamer yourself</a> if you use MacPorts and do not want to use the
|
||||
“Official” Gstreamer binaries.</li>
|
||||
</ul>
|
||||
<p><em>(If you really wish to use the MacPorts GStreamer-1.16.2, install
|
||||
pkgconf (“sudo port install pkgconf”), then “sudo port install
|
||||
gstreamer1-gst-plugins-base gstreamer1-gst-plugins-good
|
||||
gstreamer1-gst-plugins-bad gstreamer1-gst-libav”. For X11 support on
|
||||
macOS, compile UxPlay using a special cmake option
|
||||
<code>-DUSE_X11=ON</code>, and run it from an XQuartz terminal with -vs
|
||||
ximagesink; older non-retina macs require a lower resolution when using
|
||||
X11: <code>uxplay -s 800x600</code>.)</em></p>
|
||||
<p>After installing GStreamer, build and install uxplay: open a terminal
|
||||
and change into the UxPlay source directory (“UxPlay-master” for zipfile
|
||||
downloads, “UxPlay” for “git clone” downloads) and build/install with
|
||||
“cmake . ; make ; sudo make install” (same as for Linux).</p>
|
||||
<ul>
|
||||
<li><p>Running UxPlay while checking for GStreamer warnings (do this
|
||||
with “export GST_DEBUG=2” before runnng UxPlay) reveals that with the
|
||||
@@ -707,23 +721,6 @@ when the window width is changed by dragging its side; the option “-vs
|
||||
osxvideosink force-aspect-ratio=true” can be used to make the window
|
||||
have the correct aspect ratio when it first opens.</p></li>
|
||||
</ul>
|
||||
<p><strong><em>Using GStreamer installed from MacPorts (not
|
||||
recommended):</em></strong></p>
|
||||
<p>To install: “sudo port install pkgconf”; “sudo port install
|
||||
gstreamer1-gst-plugins-base gstreamer1-gst-plugins-good
|
||||
gstreamer1-gst-plugins-bad gstreamer1-gst-libav”. <strong>The MacPorts
|
||||
GStreamer is old (v1.16.2) and built to use X11</strong>: use the
|
||||
special CMake option <code>-DUSE_X11=ON</code> when building UxPlay.
|
||||
Then uxplay must be run from an XQuartz terminal, and needs option “-vs
|
||||
ximagesink”. On a unibody (non-retina) MacBook Pro, the default
|
||||
resolution wxh = 1920x1080 was too large, but using option “-s 800x600”
|
||||
worked. The MacPorts GStreamer pipeline seems fragile against attempts
|
||||
to change the X11 window size, or to rotations that switch a connected
|
||||
client between portrait and landscape mode while uxplay is running.
|
||||
Using the MacPorts X11 GStreamer seems only possible if the image size
|
||||
is left unchanged from the initial “-s wxh” setting (also use the
|
||||
iPad/iPhone setting that locks the screen orientation against switching
|
||||
between portrait and landscape mode as the device is rotated).</p>
|
||||
<h2
|
||||
id="building-uxplay-on-microsoft-windows-using-msys2-with-the-mingw-64-compiler.">Building
|
||||
UxPlay on Microsoft Windows, using MSYS2 with the MinGW-64
|
||||
|
||||
36
README.md
36
README.md
@@ -518,11 +518,10 @@ so you don't have to install one.) Install both the gstreamer-1.0 and gstreamer-
|
||||
to install (they install to /Library/FrameWorks/GStreamer.framework). Homebrew or MacPorts users should **not** install (or should uninstall)
|
||||
the GStreamer supplied by their package manager, if they use the "official" release.
|
||||
|
||||
* **ADDED 2023-01-25: in the current 1.22.x releases something in the GStreamer macOS binaries appears to not be
|
||||
working (UxPlay starts receiving the AirPlay stream, but the video window does not open)**. If
|
||||
you have this problem, use the older GStreamer-1.20.7 binary packages until a fix is found. _You could instead
|
||||
compile the "official" GStreamer-1.22.x release from source: GStreamer-1.22.0 has been successfully
|
||||
built this way on a system using MacPorts: see_ [the UxPlay Wiki](https://github.com/FDH2/UxPlay/wiki/Building-GStreamer-from-Source-on-macOS-with-MacPorts).
|
||||
* Since GStreamer v1.22, the "Official" (gstreamer.freedesktop.org) macOS binaries require a wrapper "gst_macos_main"
|
||||
around the actual main program (uxplay). This should have been applied during the UxPlay compilation process, and
|
||||
the initial UxPlay terminal message should confirm it is being used. (UxPlay can also be built using "Official" GStreamer v.1.20.7
|
||||
binaries, which work without the wrapper.)
|
||||
|
||||
**Using Homebrew's GStreamer**: pkg-config is needed: ("brew install pkg-config gstreamer").
|
||||
This causes a large number of extra packages to be installed by Homebrew as dependencies.
|
||||
@@ -534,7 +533,22 @@ extra non-Homebrew plugins (that you build yourself) there, and instead set GST_
|
||||
their location (Homebrew does not supply a complete GStreamer, but seems to have everything needed for UxPlay).
|
||||
|
||||
|
||||
Finally, build and install uxplay: open a terminal and change into the UxPlay source directory
|
||||
**Using GStreamer installed from MacPorts**: this is **not** recommended, as currently the MacPorts GStreamer
|
||||
is old (v1.16.2), unmaintained, and built to use X11:
|
||||
|
||||
* Instead [build gstreamer yourself](https://github.com/FDH2/UxPlay/wiki/Building-GStreamer-from-Source-on-macOS-with-MacPorts)
|
||||
if you use MacPorts and do not want to use the "Official" Gstreamer binaries.
|
||||
|
||||
_(If you really wish to use the MacPorts GStreamer-1.16.2,
|
||||
install pkgconf ("sudo port install pkgconf"), then
|
||||
"sudo port install gstreamer1-gst-plugins-base gstreamer1-gst-plugins-good gstreamer1-gst-plugins-bad gstreamer1-gst-libav".
|
||||
For X11 support on macOS, compile UxPlay using a special cmake option `-DUSE_X11=ON`, and run
|
||||
it from an XQuartz terminal with -vs ximagesink; older non-retina macs require a lower resolution
|
||||
when using X11: `uxplay -s 800x600`.)_
|
||||
|
||||
|
||||
|
||||
After installing GStreamer, build and install uxplay: open a terminal and change into the UxPlay source directory
|
||||
("UxPlay-master" for zipfile downloads, "UxPlay" for "git clone" downloads) and build/install with
|
||||
"cmake . ; make ; sudo make install " (same as for Linux).
|
||||
|
||||
@@ -558,16 +572,6 @@ Finally, build and install uxplay: open a terminal and change into the UxPlay so
|
||||
the option "-vs osxvideosink force-aspect-ratio=true" can be used to make the window have the
|
||||
correct aspect ratio when it first opens.
|
||||
|
||||
|
||||
***Using GStreamer installed from MacPorts (not recommended):***
|
||||
|
||||
To install: "sudo port install pkgconf"; "sudo port install gstreamer1-gst-plugins-base gstreamer1-gst-plugins-good gstreamer1-gst-plugins-bad gstreamer1-gst-libav".
|
||||
**The MacPorts GStreamer is old (v1.16.2) and built to use X11**: use the special CMake option `-DUSE_X11=ON`
|
||||
when building UxPlay. Then uxplay must be run from an XQuartz terminal, and needs
|
||||
option "-vs ximagesink". On a unibody (non-retina) MacBook Pro, the default resolution wxh = 1920x1080
|
||||
was too large, but using option "-s 800x600" worked. The MacPorts GStreamer pipeline
|
||||
seems fragile against attempts to change the X11 window size, or to rotations that switch a connected client between portrait and landscape mode while uxplay is running. Using the MacPorts X11 GStreamer seems only possible if the image size is left unchanged from the initial "-s wxh" setting (also use the iPad/iPhone setting that locks the screen orientation against switching between portrait and landscape mode as the device is rotated).
|
||||
|
||||
## Building UxPlay on Microsoft Windows, using MSYS2 with the MinGW-64 compiler.
|
||||
|
||||
* tested on Windows 10 and 11, 64-bit.
|
||||
|
||||
59
README.txt
59
README.txt
@@ -645,15 +645,13 @@ Shift-Click on them to install (they install to
|
||||
should **not** install (or should uninstall) the GStreamer supplied by
|
||||
their package manager, if they use the "official" release.
|
||||
|
||||
- **ADDED 2023-01-25: in the current 1.22.x releases something in the
|
||||
GStreamer macOS binaries appears to not be working (UxPlay starts
|
||||
receiving the AirPlay stream, but the video window does not open)**.
|
||||
If you have this problem, use the older GStreamer-1.20.7 binary
|
||||
packages until a fix is found. *You could instead compile the
|
||||
"official" GStreamer-1.22.x release from source: GStreamer-1.22.0
|
||||
has been successfully built this way on a system using MacPorts:
|
||||
see* [the UxPlay
|
||||
Wiki](https://github.com/FDH2/UxPlay/wiki/Building-GStreamer-from-Source-on-macOS-with-MacPorts).
|
||||
- Since GStreamer v1.22, the "Official" (gstreamer.freedesktop.org)
|
||||
macOS binaries require a wrapper "gst_macos_main" around the actual
|
||||
main program (uxplay). This should have been applied during the
|
||||
UxPlay compilation process, and the initial UxPlay terminal message
|
||||
should confirm it is being used. (UxPlay can also be built using
|
||||
"Official" GStreamer v.1.20.7 binaries, which work without the
|
||||
wrapper.)
|
||||
|
||||
**Using Homebrew's GStreamer**: pkg-config is needed: ("brew install
|
||||
pkg-config gstreamer"). This causes a large number of extra packages to
|
||||
@@ -668,10 +666,27 @@ Homebrew installs gstreamer to `(HOMEBREW)/lib/gstreamer-1.0` where
|
||||
point to their location (Homebrew does not supply a complete GStreamer,
|
||||
but seems to have everything needed for UxPlay).
|
||||
|
||||
Finally, build and install uxplay: open a terminal and change into the
|
||||
UxPlay source directory ("UxPlay-master" for zipfile downloads, "UxPlay"
|
||||
for "git clone" downloads) and build/install with "cmake . ; make ; sudo
|
||||
make install" (same as for Linux).
|
||||
**Using GStreamer installed from MacPorts**: this is **not**
|
||||
recommended, as currently the MacPorts GStreamer is old (v1.16.2),
|
||||
unmaintained, and built to use X11:
|
||||
|
||||
- Instead [build gstreamer
|
||||
yourself](https://github.com/FDH2/UxPlay/wiki/Building-GStreamer-from-Source-on-macOS-with-MacPorts)
|
||||
if you use MacPorts and do not want to use the "Official" Gstreamer
|
||||
binaries.
|
||||
|
||||
*(If you really wish to use the MacPorts GStreamer-1.16.2, install
|
||||
pkgconf ("sudo port install pkgconf"), then "sudo port install
|
||||
gstreamer1-gst-plugins-base gstreamer1-gst-plugins-good
|
||||
gstreamer1-gst-plugins-bad gstreamer1-gst-libav". For X11 support on
|
||||
macOS, compile UxPlay using a special cmake option `-DUSE_X11=ON`, and
|
||||
run it from an XQuartz terminal with -vs ximagesink; older non-retina
|
||||
macs require a lower resolution when using X11: `uxplay -s 800x600`.)*
|
||||
|
||||
After installing GStreamer, build and install uxplay: open a terminal
|
||||
and change into the UxPlay source directory ("UxPlay-master" for zipfile
|
||||
downloads, "UxPlay" for "git clone" downloads) and build/install with
|
||||
"cmake . ; make ; sudo make install" (same as for Linux).
|
||||
|
||||
- Running UxPlay while checking for GStreamer warnings (do this with
|
||||
"export GST_DEBUG=2" before runnng UxPlay) reveals that with the
|
||||
@@ -703,24 +718,6 @@ make install" (same as for Linux).
|
||||
option "-vs osxvideosink force-aspect-ratio=true" can be used to
|
||||
make the window have the correct aspect ratio when it first opens.
|
||||
|
||||
***Using GStreamer installed from MacPorts (not recommended):***
|
||||
|
||||
To install: "sudo port install pkgconf"; "sudo port install
|
||||
gstreamer1-gst-plugins-base gstreamer1-gst-plugins-good
|
||||
gstreamer1-gst-plugins-bad gstreamer1-gst-libav". **The MacPorts
|
||||
GStreamer is old (v1.16.2) and built to use X11**: use the special CMake
|
||||
option `-DUSE_X11=ON` when building UxPlay. Then uxplay must be run from
|
||||
an XQuartz terminal, and needs option "-vs ximagesink". On a unibody
|
||||
(non-retina) MacBook Pro, the default resolution wxh = 1920x1080 was too
|
||||
large, but using option "-s 800x600" worked. The MacPorts GStreamer
|
||||
pipeline seems fragile against attempts to change the X11 window size,
|
||||
or to rotations that switch a connected client between portrait and
|
||||
landscape mode while uxplay is running. Using the MacPorts X11 GStreamer
|
||||
seems only possible if the image size is left unchanged from the initial
|
||||
"-s wxh" setting (also use the iPad/iPhone setting that locks the screen
|
||||
orientation against switching between portrait and landscape mode as the
|
||||
device is rotated).
|
||||
|
||||
## Building UxPlay on Microsoft Windows, using MSYS2 with the MinGW-64 compiler.
|
||||
|
||||
- tested on Windows 10 and 11, 64-bit.
|
||||
|
||||
@@ -44,6 +44,11 @@ target_link_libraries ( renderers PUBLIC airplay )
|
||||
if( GST_INCLUDE_DIRS MATCHES "/Library/FrameWorks/GStreamer.framework/include" )
|
||||
set( GST_INCLUDE_DIRS "/Library/FrameWorks/GStreamer.framework/Headers")
|
||||
message( STATUS "GST_INCLUDE_DIRS" ${GST_INCLUDE_DIRS} )
|
||||
# fix to use -DGST_MACOS for "Official" GStreamer >= 1.22 packages
|
||||
pkg_check_modules ( GST122 gstreamer-1.0>=1.22 )
|
||||
if ( GST122_FOUND )
|
||||
set( GST_MACOS "1" CACHE STRING "define GST_MACOS in uxplay.cpp" )
|
||||
endif()
|
||||
endif()
|
||||
target_include_directories ( renderers PUBLIC ${GST_INCLUDE_DIRS} )
|
||||
|
||||
@@ -62,3 +67,4 @@ else()
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
|
||||
13
uxplay.cpp
13
uxplay.cpp
@@ -1505,8 +1505,21 @@ static void read_config_file(const char * filename, const char * uxplay_name) {
|
||||
free (argv);
|
||||
}
|
||||
}
|
||||
#ifdef GST_MACOS
|
||||
/* workaround for GStreamer >= 1.22 "Official Builds" on macOS */
|
||||
#include <TargetConditionals.h>
|
||||
#include <gst/gstmacos.h>
|
||||
void real_main (int argc, char *argv[]);
|
||||
|
||||
int main (int argc, char *argv[]) {
|
||||
printf("*=== Using gst_macos_main wrapper for GStreamer >= 1.22 on macOS ===*\n");
|
||||
return gst_macos_main ((GstMainFunc) real_main, argc, argv , NULL);
|
||||
}
|
||||
|
||||
void real_main (int argc, char *argv[]) {
|
||||
#else
|
||||
int main (int argc, char *argv[]) {
|
||||
#endif
|
||||
std::vector<char> server_hw_addr;
|
||||
std::string mac_address;
|
||||
std::string config_file = "";
|
||||
|
||||
Reference in New Issue
Block a user