Frage zu Installation von droidcam bzw. Verwendung von Smartphonekamera als Webcam unter FreeBSD

cabriofahrer

Well-Known Member
Im Internet findet man Anleitungen, wie man die Kamera eines Smartphones als USB-Kamera am PC verwenden kann, jedoch leider nur für Windows und MacOS. Zu FreeBSD habe ich das hier gefunden:


Unten unter FreeBSD ist zunächst einmal beschrieben, welche Pakete man installieren soll:

Code:
Getting all the necessary dependencies

Run doas pkg install gmake gcc pkgconf libjpeg-turbo usbmuxd libusbmuxd alsa-lib v4l_compat speex ffmpeg webcamd libappindicator

"Doas" kann man wohl weglassen, ein "pkg install" der aufgelisteten Pakete funktioniert.
Ich nehme mal an, dass man sich dann die Quellen herunterladen muss und dann in dem Verzeichnis "gmake droidcam-cli" und "./install-client" ausführen muss.
Allerdings habe ich da etwas Angst, auf derartigem Wege etwas zu installieren, was nicht in den Ports ist.
Hat jemand Erfahrung damit oder gibt es vielleicht einen anderen oder besseren Weg unter FreeBSD, die Kamera eines Smartphones als Webcam zu verwenden? Die Auflösung meiner Webcam ist wirklich zu gering. Ziel ist es, Videokonferenzen unter Chrome durchzuführen (was mit Firefox offenbar sowieso nicht geht).
 
Zuletzt bearbeitet:
Ne kurze google-suche hat auch für mich nichts anderes ergeben sofern du USB nutzen möchtest. Entsprechend wirst du um das installieren von etwas außerhalb der Ports wohl nicht herumkommen.

Es gibt alternativ wohl diverse Optionen die Kamera per WLAN (Webcam) freizugeben und dann auch als "webcam" per IP wieder local einzubinden - klingt für mich erstmal aber "wackeliger"

Denk bitte dadrann deine genaue FreeBSD Version etc anzugeben wenn es nicht läuft und du hilfe benötigst.
 
Es gibt alternativ wohl diverse Optionen die Kamera per WLAN (Webcam) freizugeben und dann auch als "webcam" per IP wieder local einzubinden - klingt für mich erstmal aber "wackeliger"
Derartige Optionen ohne Kabel finde ich sogar interessanter und möglicherweise letztendlich bequemer, also nehme ich hier gerne Infos entgegen, wie ich am besten die Kamera über Wlan an meinen PC einbinden kann. Aber warum soll das "wackeliger" sein?
Meine Version ist amd64 13.1.

Zu der Frage von Installationen außerhalb der Ports ist meine größte Sorge ganz allgemein, wohin was überhaupt installiert wird und ob und wie man das hinterher wieder entfernen kann und ob da nicht irgendwie Systemdateien überschrieben werden können?
 
oder besseren Weg unter FreeBSD, die Kamera eines Smartphones als Webcam zu verwenden?
Nicht wirklich, ich lande auch bei droidcam. Deine Anleitung da klingt gut, im Grunde brauchts halt das Gegenstück am PC, was dir ein /dev/video0 gibt.
Wenn du was mit adb fummeln musst, dann brauchst du jenes: https://www.freshports.org/devel/android-tools/

Wackelig im Sinne von möglichen lags und schlechterer Bildqualität bei schwankendem WLAN könnte ich mir vorstellen. Droidcam soll aber mit beidem funktionieren, so steht es zumindest geschrieben.

FRITZ!App Cam gab es noch, mittlerweile eingestellt. Ka, ob das was taugt.
 
Hm, ich habe es mal mit droidcam versucht, es startet aber nicht. Zunächst habe ich die droidcam_1.8.2.zip Datei von hier (https://github.com/dev47apps/droidcam/releases) heruntergeladen, entpackt und installiert:

Code:
# cd Downloads/droidcam/droidcam_1.8.2
# ls
droidcam        install-dkms        README-DKMS.md
droidcam-cli        install-sound        README.md
droidcam.desktop    install-video        uninstall
icon2.png        install.common        uninstall-dkms
install-client        LICENSE            v4l2loopback
# ./install-client
su: ./install-client: not found
# ./install-client
su: ./install-client: not found
# sh install-client
Copying files
+ cp uninstall /opt/droidcam-uninstall
+ cp icon2.png /opt/droidcam-icon.png
+ cp droidcam /usr/local/bin/
+ cp droidcam-cli /usr/local/bin/
+ set +x
Done

Soweit, sogut. Doch wenn ich "droidcam" starte, bekomme ich:

Code:
$ droidcam &
$ droidcam: error while loading shared libraries: libgtk-3.so.0: cannot open shared object file: No such file or directory

[1]   Done(127)               droidcam

Warum? Ich habe doch GTK3 installiert:

Code:
$ pkg info | grep gtk3
avahi-gtk3-0.8_1               Gtk+ 3 library to the Avahi mDNS system
gtk3-3.24.34                   Gimp Toolkit for X11 GUI (current stable version)
libcanberra-gtk3-0.30_8        Implementation of the Freedesktop sound theme spec
webkit2-gtk3-2.34.6_3          Opensource browser engine using the GTK+ 3 toolkit
wx31-gtk3-3.1.5_2              GUI toolkit (wxWidgets) with GTK+3 bindings
$

Und "droidcam-cli" funktioniert auch nicht:

Code:
$ droidcam-cli
droidcam-cli: error while loading shared libraries: libspeex.so.1: cannot open shared object file: No such file or directory
 
Ist das evtl. nen Linux-Binary? Ich glaube du must den o.G. weg mit selbstkompilieren etc gehen den du oben gelinkt hast.
 
Hm, ich habe es mal auf meinem Notebook mit Fedoda 36 versucht, ich bekomme aber nur ein schwarzes Bild und keinen Ton. Alles nur reine Zeitverschwendung...
 
Ist das evtl. nen Linux-Binary?
Möglicherweise ist es so, dass das Programm droidcam nach dieser Bibliothek in einem falschen Pfad sucht, weil die Pfade unter FreeBSD anders sind als unter Linux? Denn die Bibliotheken sind vorhanden:

Code:
$ pkg info -l gtk3 | grep .so
    /usr/local/include/gtk-3.0/gdk/broadway/gdkbroadwaycursor.h
    /usr/local/include/gtk-3.0/gdk/gdkcursor.h
    /usr/local/include/gtk-3.0/gdk/x11/gdkx11cursor.h
    /usr/local/include/gtk-3.0/gtk/a11y/gtksocketaccessible.h
    /usr/local/include/gtk-3.0/gtk/gtkdragsource.h
    /usr/local/include/gtk-3.0/gtk/gtksocket.h
    /usr/local/include/gtk-3.0/gtk/gtktreemodelsort.h
    /usr/local/include/gtk-3.0/gtk/gtktreesortable.h
    /usr/local/lib/gtk-3.0/3.0.0/immodules/im-am-et.so
    /usr/local/lib/gtk-3.0/3.0.0/immodules/im-broadway.so
    /usr/local/lib/gtk-3.0/3.0.0/immodules/im-cedilla.so
    /usr/local/lib/gtk-3.0/3.0.0/immodules/im-cyrillic-translit.so
    /usr/local/lib/gtk-3.0/3.0.0/immodules/im-inuktitut.so
    /usr/local/lib/gtk-3.0/3.0.0/immodules/im-ipa.so
    /usr/local/lib/gtk-3.0/3.0.0/immodules/im-multipress.so
    /usr/local/lib/gtk-3.0/3.0.0/immodules/im-thai.so
    /usr/local/lib/gtk-3.0/3.0.0/immodules/im-ti-er.so
    /usr/local/lib/gtk-3.0/3.0.0/immodules/im-ti-et.so
    /usr/local/lib/gtk-3.0/3.0.0/immodules/im-viqr.so
    /usr/local/lib/gtk-3.0/3.0.0/immodules/im-wayland.so
    /usr/local/lib/gtk-3.0/3.0.0/immodules/im-waylandgtk.so
    /usr/local/lib/gtk-3.0/3.0.0/immodules/im-xim.so
    /usr/local/lib/gtk-3.0/3.0.0/printbackends/libprintbackend-cups.so
    /usr/local/lib/gtk-3.0/3.0.0/printbackends/libprintbackend-file.so
    /usr/local/lib/gtk-3.0/3.0.0/printbackends/libprintbackend-lpr.so
    /usr/local/lib/libgailutil-3.so
    /usr/local/lib/libgailutil-3.so.0
    /usr/local/lib/libgailutil-3.so.0.0.0
    /usr/local/lib/libgdk-3.so
    /usr/local/lib/libgdk-3.so.0
    /usr/local/lib/libgdk-3.so.0.2404.30
    /usr/local/lib/libgtk-3.so
    /usr/local/lib/libgtk-3.so.0
    /usr/local/lib/libgtk-3.so.0.2404.30

Code:
$ pkg info -l speex | grep .so
    /usr/local/lib/libspeex.so
    /usr/local/lib/libspeex.so.1
    /usr/local/lib/libspeex.so.1.5.2
$

Wie kann ich also erreichen, dass droidcam in den Pfaden von FreeBSD sucht? Ich nehme an, mit einem Softlink? Doch wie finde ich heraus, wo droidcam überhaupt zunächst sucht?
 
Möglicherweise ist es so, dass das Programm droidcam nach dieser Bibliothek in einem falschen Pfad sucht, weil die Pfade unter FreeBSD anders sind als unter Linux?
Ob das ein Linux-Binary ist, kriegst Du z.B. mit file (bzw. brandelf, weil sich daraus ableitet welche ABI FreeBSD benutzt) raus:
file /path/to/droidcam
Und ja. Möglicherweise sucht er (dadurch) im falschen Pfad.

Wie kann ich also erreichen, dass droidcam in den Pfaden von FreeBSD sucht? Ich nehme an, mit einem Softlink?
Was auch immer Du mit Softlink meinst. Ich nehme an, Du meinst einen symbolischen Link.
Ähm nein. Links wären weniger gut, weil die ja global wirken und dann dementsprechend potentiell andere Programme in Mitleidenschaft ziehen.
Es gibt einen besseren Mechanismus dafür. Library-Mapping. Konfigurierbar über die libmap.conf.

Ansonsten gibts ja dann auch noch die Umgebungsvariable LD_LIBRARY_PATH, wo man ja auch angeben kann, in welchen Verzeichnissen nach Shared-Libraries gesucht werden soll.

Doch wie finde ich heraus, wo droidcam überhaupt zunächst sucht?
Die einfachste Variante wäre zunächst mit ldd draufzugucken:
ldd /path/to/droidcam

Man kann auch allgemein drauf gucken, auf welche Dateien ein Programm zugreift. Zum Beispiel mit truss. Das zeigt auf, welche syscalls aufgerufen werden. Dann sieht man auch, auf welche Dateien ein Prozess zugreift.
truss /path/to/droidcam

Du könntest theoretisch mit dtrace den open-Aufruf tracken:
dtrace -n 'syscall::open:entry /execname=="droidcam"/{ printf("%s %s", execname, copyinstr(arg0)); }'

Man muss ein bisschen aufpassen wie man die Ergebnisse interpretiert. Nicht jeder fehlgeschlagene Dateizugriff ist gleichbedeutend damit, das ein Fehler im Programm passiert. Typischer Fall ist sowas wie der Zugriff auf eine Konfigurationsdatei. Wenn die nicht da ist, ist das i.d.R. nicht schlimm und das Programm fährt mit default-Werten fort.
 
Zuletzt bearbeitet:
Vielen Dank erstmal für diese ausführliche Antwort! Und ja, ich meinte "symbolic link", ich hatte den Begriff falsch in Erinnerung. Hier zunächst mal die Ausgaben von ldd, file und brandelf:

Code:
$ ldd /usr/local/bin/droidcam
/usr/local/bin/droidcam:
    linux_vdso.so.1 =>  (0x00007ffffffff000)
    libgtk-3.so.0 => not found
    libgdk-3.so.0 => not found
    libpango-1.0.so.0 => /lib64/libpango-1.0.so.0 (0x0000000800a00000)
    libgio-2.0.so.0 => /lib64/libgio-2.0.so.0 (0x0000000800e00000)
    libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x0000000801200000)
    libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x0000000801600000)
    libX11.so.6 => /lib64/libX11.so.6 (0x0000000801a00000)
    libappindicator3.so.1 => not found
    libspeex.so.1 => not found
    libasound.so.2 => /lib64/libasound.so.2 (0x0000000801e00000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x0000000802200000)
    libm.so.6 => /lib64/libm.so.6 (0x0000000802600000)
    libc.so.6 => /lib64/libc.so.6 (0x0000000802a00000)
    /lib64/ld-linux-x86-64.so.2 (0x000000080076f000)
    libthai.so.0 => /lib64/libthai.so.0 (0x0000000802e00000)
    libfribidi.so.0 => /lib64/libfribidi.so.0 (0x0000000803200000)
    libffi.so.6 => /lib64/libffi.so.6 (0x0000000803600000)
    libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x0000000803a00000)
    libdl.so.2 => /lib64/libdl.so.2 (0x0000000803e00000)
    libpcre.so.1 => /lib64/libpcre.so.1 (0x0000000804200000)
    libz.so.1 => /lib64/libz.so.1 (0x0000000804600000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x0000000804a00000)
    libresolv.so.2 => /lib64/libresolv.so.2 (0x0000000804e00000)
    libmount.so.1 => /lib64/libmount.so.1 (0x0000000805200000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000000805600000)
    libxcb.so.1 => /lib64/libxcb.so.1 (0x0000000805a00000)
    librt.so.1 => /lib64/librt.so.1 (0x0000000805e00000)
    libblkid.so.1 => /lib64/libblkid.so.1 (0x0000000806200000)
    libuuid.so.1 => /lib64/libuuid.so.1 (0x0000000806600000)
    libXau.so.6 => /lib64/libXau.so.6 (0x0000000806a00000)
$ file /usr/local/bin/droidcam
/usr/local/bin/droidcam: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=971c01c25236c8feaf459a7daf1c38a63fd7c8ca, with debug_info, not stripped
$ brandelf /usr/local/bin/droidcam
File '/usr/local/bin/droidcam' is of brand 'SVR4' (0).
$  /usr/local/bin/droidcam

Ich war zunächst auf die Idee gekommen, dass möglicherweise gtk3 für Linux fehlt. Und tatsächlich, ein "pkg search linux | grep gtk3" ergab, dass es das gibt. Ich konnte es dann mit "pkg install linux-c7-gtk3" installieren und droidcam meckert diesbezüglich nicht mehr. Es fehlen aber noch libappindicator und speex und die gibt es nicht als linux-c7 Pakete.
Da komme ich jetzt also nicht weiter.
 
Anstelle hier mit Linux-Paketen rumzubasteln macht es vermutlich sinn die von dir verlinkte Anleitung für FreeBSD zu verfolgen.

Selbst wenn es funktioniert das Programm zu starten wäre ich mir nicht so sicher ob diese Linux-Emulations-Schicht wirklich für den Zugriff auf ADB funktioniert, du baust dir ja damit quasi noch eine weitere mögliche Fehlerquelle / komplexität zwischen dem Programm und dem ADB ein.
 
Anstelle hier mit Linux-Paketen rumzubasteln macht es vermutlich sinn die von dir verlinkte Anleitung für FreeBSD zu verfolgen.
Du meinst https://github.com/Loretta-Sirerol/droidcam-bsd ?
Ja. Dem würde ich mich anschließen.

Ich nehme mal an, dass man sich dann die Quellen herunterladen muss und dann in dem Verzeichnis "gmake droidcam-cli" und "./install-client" ausführen muss.
Ja. Wobei gmake droidcam-cli nur die Kommandozeilenversion des Programms kompiliert. Wenn Dir das reicht, ists ok. Ansonsten rufe einfach gmake ohne Parameter auf.

Allerdings habe ich da etwas Angst, auf derartigem Wege etwas zu installieren, was nicht in den Ports ist.
Das ist ja nur dann ein Problem, wenn irgendwie Dateien ins System gelangen die in Konflikt mit Dateien von Ports/Packages stehen können.
Also der gmake - Aufruf als solches ist sowieso erst mal unproblematisch, da da nur Dateien innerhalb von droidcam-bsd/ abgelegt werden. Die erzeugten Binaries kannst Du im Prinzip auch so benutzen, wie sie da liegen ohne irgendwas zu installieren.
Das Bash-Skript install-client macht auch nicht wirklich viel.
Im Wesentlichen das Konfig.Verzeichnis in Deinem Home-Verzeichnis aufbereiten und dann da die 4 Dateien an die angegebene Stelle zu kopieren. Wenn Du partout nicht willst, das da die Binaries unter /usr/local/bin/ kopiert werden, da es potentiell Konflikte mit den Ports/Packages geben kann, kannst Du das auch anpassen und zum Beispiel unter /opt/droidcam/ kopieren lassen. Musst halt nur die droidcam.desktop damit für den Menüeintrag die Pfade passen.

Eine angepasste install-client könnte z.B. so aussehen:
Bash:
#!/bin/bash
set -e

if [ -z "$SUDO_USER" ]; then
    USER_HOME=~
else
    USER_HOME=$(getent passwd "$SUDO_USER" | cut -d: -f6)
fi

[ -d /opt ] || mkdir -p /opt
[ -d "$USER_HOME/.config" ] || mkdir -p "$USER_HOME/.config"

# remove old settings
if [ -f "$USER_HOME/.droidcam/settings" ]; then
    mv "$USER_HOME/.droidcam/settings" "$USER_HOME/.config/droidcam"
    rm -rf "$USER_HOME/.droidcam"
fi
# remove old-old binaries
rm -f /usr/bin/droidcam*

echo "Copying files"
set -x
mkdir -p /opt/droidcam
cp uninstall    /opt/droidcam/droidcam-uninstall
cp icon2.png    /opt/droidcam/droidcam-icon.png
cp droidcam     /opt/droidcam/
cp droidcam-cli /opt/droidcam/
set +x
if [ "$(command -v xdg-desktop-menu)" != "" ]; then
    xdg-desktop-menu install --novendor droidcam.desktop
fi
echo "Done"

Die dazu korrespondierende droidcam.desktop :
Bash:
[Desktop Entry]
Encoding=UTF-8
Name=DroidCam
Comment=Use your phone as a webcam
TryExec=/opt/droidcam/droidcam
Exec=/opt/droidcam/droidcam
Icon=/opt/droidcam/droidcam-icon.png
Terminal=false
Type=Application
Categories=Video;AudioVideo;

Und passend dazu auch ein entsprechend geändertes uninstall :
Bash:
#!/bin/bash
#

if (lsmod | grep v4l2loopback_dc); then
    echo "Removing video device"
    rmmod v4l2loopback_dc
    rm -f /lib/modules/`uname -r`/kernel/drivers/media/video/v4l2loopback-dc.ko
fi

echo "Removing files"
sudo rm -f /opt/droidcam/droidcam-uninstall
sudo rm -f /opt/droidcam/droidcam-icon.png
sudo rm -f /opt/droidcam/droidcam
sudo rm -f /opt/droidcam/droidcam-cli
sudo rmdir /opt/droidcam/
sudo xdg-desktop-menu uninstall droidcam.desktop

etc_modules() {
    # Remove droidcam reference in /etc/modules
    cat /etc/modules | egrep -v "^(videodev|v4l2loopback_dc)" > /tmp/.etc.modules
    prevperm=`stat -c %a /etc/modules`
    sudo mv /tmp/.etc.modules /etc/modules
    sudo chmod $prevperm /etc/modules
}

echo "Cleaning configs"
[[ -e "/etc/modules" ]] && etc_modules
rm -f /etc/modprobe.d/droidcam.conf || true
rm -f /etc/modules-load.d/droidcam.conf || true
rm -f /opt/droidcam*
echo "Done"

So hast Du alles hübsch im Verzeichnis /opt/droidcam/ und nix kann mit bestehenden oder künftigen Ports/Packages in Konflikt geraten.

PS:
Angst haben Ports kaputt zu machen, aber dann wild im System "herum-symlinken" wollen, um irgendwelche Bibliotheken zugänglich zu machen. :-)
 
Anstelle hier mit Linux-Paketen rumzubasteln macht es vermutlich sinn die von dir verlinkte Anleitung für FreeBSD zu verfolgen.
Ich dachte, genau das hätte ich von Anfabg an getan. Das "gmake" ging gar nicht, die Dateien "droidcam" und "droidcam-cli" waren in der ZIP-Datei schon enthalten und es funktionierte direkt das "sh install-client". Das hat mich jetzt stutzig gemacht. Offenbar enthielt die ZIP-Datei schon die für Linux fertig kompilierte Version von droidcam, deswegen funktionierte gmake gar nicht.
Ich habe jetzt die Datei heruntergeladen und entpackt, die wohl die Quellen enthält. Das Bauen klappt aber nicht, ich bekomme folgende Fehlermeldung:

Code:
# gmake
gcc  -Wall -O2 src/droidcam-cli.c src/connection.c src/settings.c src/decoder_snd.c src/decoder_v4l2.c src/decoder.c src/av.c src/usb.c src/queue.c -o droidcam-cli  -I/opt/libjpeg-turbo/include /opt/libjpeg-turbo/lib`getconf LONG_BIT`/libturbojpeg.a `pkg-config --libs --cflags libswscale libavutil` -lspeex -lasound -lpthread -lm -lusbmuxd
src/connection.c: In function 'Connect':
src/connection.c:32:24: error: storage size of 'sin' isn't known
   32 |     struct sockaddr_in sin;
      |                        ^~~
src/connection.c:33:48: error: 'IPPROTO_TCP' undeclared (first use in this function)
   33 |     SOCKET sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
      |                                                ^~~~~~~~~~~
src/connection.c:33:48: note: each undeclared identifier is reported only once for each function it appears in
src/connection.c:32:24: warning: unused variable 'sin' [-Wunused-variable]
   32 |     struct sockaddr_in sin;
      |                        ^~~
src/connection.c: In function 'RecvNonBlockUDP':
src/connection.c:114:24: error: storage size of 'from' isn't known
  114 |     struct sockaddr_in from;
      |                        ^~~~
src/connection.c:114:24: warning: unused variable 'from' [-Wunused-variable]
src/connection.c: In function 'SendUDPMessage':
src/connection.c:121:24: error: storage size of 'sin' isn't known
  121 |     struct sockaddr_in sin;
      |                        ^~~
src/connection.c:121:24: warning: unused variable 'sin' [-Wunused-variable]
src/connection.c: In function 'CreateUdpSocket':
src/connection.c:129:40: error: 'IPPROTO_UDP' undeclared (first use in this function)
  129 |     return socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
      |                                        ^~~~~~~~~~~
src/connection.c: In function 'StartInetServer':
src/connection.c:135:24: error: storage size of 'sin' isn't known
  135 |     struct sockaddr_in sin;
      |                        ^~~
src/connection.c:138:27: error: 'INADDR_ANY' undeclared (first use in this function)
  138 |     sin.sin_addr.s_addr = INADDR_ANY;
      |                           ^~~~~~~~~~
src/connection.c:141:53: error: 'IPPROTO_TCP' undeclared (first use in this function)
  141 |     wifiServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
      |                                                     ^~~~~~~~~~~
src/connection.c:135:24: warning: unused variable 'sin' [-Wunused-variable]
  135 |     struct sockaddr_in sin;
      |                        ^~~
src/connection.c: In function 'SendUDPMessage':
src/connection.c:126:1: warning: control reaches end of non-void function [-Wreturn-type]
  126 | }
      | ^
src/connection.c: In function 'CreateUdpSocket':
src/connection.c:130:1: warning: control reaches end of non-void function [-Wreturn-type]
  130 | }
      | ^
src/settings.c:12:10: fatal error: linux/limits.h: No such file or directory
   12 | #include <linux/limits.h>
      |          ^~~~~~~~~~~~~~~~
compilation terminated.
src/decoder.c:17:10: fatal error: linux/limits.h: No such file or directory
   17 | #include <linux/limits.h>
      |          ^~~~~~~~~~~~~~~~
compilation terminated.
src/usb.c: In function 'CheckAdbDevices':
src/usb.c:46:13: warning: implicit declaration of function 'WEXITSTATUS' [-Wimplicit-function-declaration]
   46 |         if (WEXITSTATUS(rc) != 0){
      |             ^~~~~~~~~~~
gmake: *** [Makefile:43: droidcam-cli] Error 1
 
Naja du hast ja wenn ich das richtig sehe ein Binary heruntergeladen und nicht das was in der Anleitung empfohlen wird oder sehe ich das falsch?
 
Ich habe jetzt die Datei heruntergeladen und entpackt
Welche hast Du denn konkret runtergeladen?
Der korrekte Link für die ZIP-Datei sollte
https://github.com/Loretta-Sirerol/droidcam-bsd/archive/refs/heads/master.zip
sein.

Alternative kannst Du Dir das auch mit git ziehen:
git clone https://github.com/Loretta-Sirerol/droidcam-bsd.git

src/connection.c: In function 'Connect': src/connection.c:32:24: error: storage size of 'sin' isn't known 32 | struct sockaddr_in sin;
Bin etwas verwundert das er da Zeile 32 anmeckert.
Laut src/connection.c kommt das was er anmeckert erst in Zeile 38
Könnte es sein, das Du irgendwie ne falsche Version herunter geladen hast?
Ich hab mal die o.g. Datei runter geladen und kompiliert. Bei mir läufts durch und die Binaries sind (danach) auch alle da.
 
Welche hast Du denn konkret runtergeladen?
Ich bin dem Pfad für Releases oben in der Anleitung gefolgt. Zuerst lud ich mir droidcam_1.8.2.zip herunter, das war aber offenbar schon kompiliert. Danach "Source code (zip)".

Der korrekte Link für die ZIP-Datei sollte
https://github.com/Loretta-Sirerol/droidcam-bsd/archive/refs/heads/master.zip
sein.
In der Tat, damit hat es geklappt. Aber wie kommt man aufgrund der Anleitung auf diese Adresse?

So, jetzt das nächste Problem. Zunächst einmal die von mir durchgeführten Schritte:

Code:
$ cd Downloads/droidcam/droidcam-bsd-master
$ su
Password:
su: Sorry
$ gmake
cc  -Wall -O2 src/droidcam-cli.c src/connection.c src/settings.c src/decoder_snd.c src/decoder_v4l2.c src/decoder.c src/av.c src/usb.c src/queue.c -o droidcam-cli  -I/usr/local/include /usr/local/lib/libturbojpeg.a `pkg-config --libs --cflags libswscale libavutil` -lspeex -lasound -lpthread -lm -lusbmuxd-2.0
In file included from src/settings.c:19:
/usr/include/sys/syslimits.h:43:2: warning: "No user-serviceable parts inside." [-W#warnings]
#warning "No user-serviceable parts inside."
 ^
1 warning generated.
cc  -Wall -O2 src/droidcam.c src/resources.c src/connection.c src/settings.c src/decoder_snd.c src/decoder_v4l2.c src/decoder.c src/av.c src/usb.c src/queue.c -o droidcam  `pkg-config --libs --cflags gtk+-3.0` `pkg-config --libs x11` `pkg-config --libs --cflags appindicator3-0.1` -I/usr/local/include /usr/local/lib/libturbojpeg.a `pkg-config --libs --cflags libswscale libavutil` -lspeex -lasound -lpthread -lm -lusbmuxd-2.0
In file included from src/settings.c:19:
/usr/include/sys/syslimits.h:43:2: warning: "No user-serviceable parts inside." [-W#warnings]
#warning "No user-serviceable parts inside."
 ^
1 warning generated.
$ su
Password:
# sh install-client
Copying files
+ cp uninstall /opt/droidcam-uninstall
+ cp icon2.png /opt/droidcam-icon.png
+ cp droidcam /usr/local/bin/
+ cp droidcam-cli /usr/local/bin/
+ set +x
Done
# sh install-video
install-video: source: not found
# pwd
/usr/home/werner/Downloads/droidcam/droidcam-bsd-master
# ls
.github            install-client        README-DKMS.md
.gitignore        install-dkms        README.md
droidcam        install-sound        src
droidcam-cli        install-video        uninstall
droidcam.desktop    install.common        uninstall-dkms
icon.png        LICENSE            v4l2loopback
icon2.png        Makefile
# sh install-video
install-video: source: not found
#

Der Build hat wie gesagt geklappt, das Programm wird erfolgreich aufgerufen, findet aber kein Video Device:

1670791643658.png


Dann dachte ich, ich müsste im selben Verzeichnis eben ein "sh install-video" ausführen und auch ein "sh install-sound". Doch meine Ausgabe zeigt:

Code:
# sh install-video
install-video: source: not found

Wie geht es jetzt genau weiter?
 
Ich bin dem Pfad für Releases oben in der Anleitung gefolgt.
Poste doch einfach den Link, dann spart man sich umständliche Erklärungen und Herumgerate.

In der Tat, damit hat es geklappt. Aber wie kommt man aufgrund der Anleitung auf diese Adresse?
Ich muss ehrlich zugeben, ich hab die Anleitung nicht gelesen (welche Anleitung eigentlich?) und bin infolge dessen auch nicht zur Release-Page.
Ich hab den "normalen" github-Mechanismus genommen. Also auf die Seite von droidcam-bsd drauf und dann auf den grünen Code-Button drauf und dort dann Download ZIP:
github.gif

So, jetzt das nächste Problem.
Wie kommst Du darauf, das Du die install-video ausführen musst? Laut README.md steht im FreeBSD-Abschnitt gar nix davon.
Abgesehen davon weiß ich gar nicht, ob der Aufruf so überhaupt funktioniert. Denn install-video ist ein Bash-Skript. sh ist aber unter FreeBSD ne POSIX-Shell.

Bevor Du irgendwie da weiter rumfummelst, guck doch erst mal, ob sich das kompilierte Binary droidcam aufrufen lässt. Wenn dann was nicht funktioniert, kann man immer noch weiter sehen.
 
Poste doch einfach den Link, dann spart man sich umständliche Erklärungen und Herumgerate.
Den Link mit der Anleitung hatte ich doch oben gleich zu Beginn gepostet, aber hier nochmal:


Bevor Du irgendwie da weiter rumfummelst, guck doch erst mal, ob sich das kompilierte Binary droidcam aufrufen lässt. Wenn dann was nicht funktioniert, kann man immer noch weiter sehen.
Das habe ich doch, also hier nochmal:

Der Build hat wie gesagt geklappt, das Programm wird erfolgreich aufgerufen, findet aber kein Video Device:

1670791643658.png
Und da steht: "Error Droidcam/v4l2loopback device not found (/dev/video[0-9]). Did it install correctly? ... "

So komme ich darauf, dass das installiert werden muss.

Laut README.md steht im FreeBSD-Abschnitt gar nix davon.
Das ist zwar richtig, aber mir stellt sich die Frage, wie diese Anleitung zu lesen ist. Schließlich steht ja im FreeBSD-Abschnitt auch nicht, wo man die Quellen besorgt. Es kann also sein, dass einige im Vorfeld erklärte Dinge auch für FreeBSD gelten. Sicher bin ich mir aber natürlich nicht.

Abgesehen davon weiß ich gar nicht, ob der Aufruf so überhaupt funktioniert. Denn install-video ist ein Bash-Skript. sh ist aber unter FreeBSD ne POSIX-Shell.
"./" funktioniert bei mir nicht, "sh" aber schon. Und nochmal, droidcam lässt sich ja aufrufen. Wir sind jetzt an dem Punkt "Error Droidcam/v4l2loopback device not found (/dev/video[0-9]). Did it install correctly? ... ", siehe nochmal den Screenshot.

Und die unterste Zeile im Screenshot im unten liegenden Fenster "Client v1.8.2, Video: , Audio:" (beides leer) lässt schon vermuten, dass auch kein Audio Device gefunden wird und wahrscheinlich auch "install-sound" ausgeführt werden muss.
 
Wie ich die Fehlermeldung verstehe, wird die Hardware nicht erkannt. Das hat vermutlich nichts mit droidcam zu tun, sondern eher mit der Verbindung zwischen Smartphone und Rechner. Meiner Erfahrung nach koennen hier zwei Ursachen sein:

1. ein ungeeignetes USB-Kabel

oder

2. ein Berechtigunsproblem bezueglich Freigabe vom Smartphone ueber USB.

Die Sache mit dem ungeeigneten USB-Kabel hatte ich schon oefter, wenn ich z.B. GrapheneOS auf ein Google Pixel aufspielen wollte. Scheinbar klappt das nur mit hochwertigen Kabeln.

Bei dem Berechtigungsproblem: "USB Debugging" muss unter "Developer Options" aktiviert sein.
 
Die Sache mit dem ungeeigneten USB-Kabel hatte ich schon oefter, wenn ich z.B. GrapheneOS auf ein Google Pixel aufspielen wollte.
Kann ich bestätigen, aber nicht genau festmachen woran das liegt. Bessere Schirmung? Ganz dünne Kabel gehen oft nicht, originale Kabel von Blackberries (mit Logo auf Stecker!) auf jeden Fall, deswegen hebe ich die bevorzugt auf.
 
Achja, wenn das Smartphone an den Rechner angeschlossen ist, erscheint normalerweise eine Mitteilung in der Mitteilungszentrale des Smartphones (vom Bildschirmrand oben runterziehen). Die Benachrichtigung anklicken und die USB-Optionen aufrufen. Dort kann man die Verbindung dann erlauben (PTP/Picture Transfer, Camera oder Charging Mode auswaehlen).
 
Kann ich bestätigen, aber nicht genau festmachen woran das liegt. Bessere Schirmung? Ganz dünne Kabel gehen oft nicht, originale Kabel von Blackberries (mit Logo auf Stecker!) auf jeden Fall, deswegen hebe ich die bevorzugt auf.

Zitat von GrapheneOS:

You need a USB cable for attaching the device to a laptop or desktop. Whenever possible, use the high quality standards compliant USB-C cable packaged with the device. If your computer doesn't have any USB-C ports, you'll need a high quality USB-C to USB-A cable. You should avoid using a USB hub such as the front panel on a desktop computer case. Connect directly to a rear port on a desktop or the ports on a laptop. Many widely distributed USB cables and hubs are broken and are the most common source of issues for installing GrapheneOS.
 
Was mir noch einfaellt: Nutzt Du eine Firewall auf dem Rechner? Sind die entsprechenden Ports 4747, 4848, 5050 und 5151 freigegeben?
 
Und da steht: "Error Droidcam/v4l2loopback device not found (/dev/video[0-9]). Did it install correctly? ... "
Wie schließt Du das "Device" überhaupt an? Per WLAN oder USB? Hast Du mal beides probiert?
Wenn Du es per USB anschließt, taucht denn dazu was in /var/log/messages auf (mit tail -f /var/log/messages kannst Du die Datei "live" beobachten und siehst dann auch Einträge auftauchen, wenn Du ein USB-Gerät anschließt)?

Manchmal gibts auch auf der Kommandozeile noch Zusatzinformationen. Wenn Du also droidcam startest, dann idealerweise aus einem Konsolenfenster heraus.

"./" funktioniert bei mir nicht, "sh" aber schon.
Keine Ahnung, ob das einen Fehler auslöst. Aber man sollte die Skripts idealerweise schon so ausführen, wie vorgesehen. Und wenn Du schon ein Bash-Skript nicht "direkt" startest, dann auch mit dem entsprechenden Kommandozeileninterpreter. Also bei nem Bashskript so: bash myscript
Aber zum ganzen Thema Installation hatte ich mich ja bereits ausführlich geäußert.

lässt schon vermuten, dass auch kein Audio Device gefunden wird und wahrscheinlich auch "install-sound" ausgeführt werden muss.
Diese ganzen Skripte wie install-sound oder install-video sind Linux-Skripte die unter FreeBSD nicht funktionieren (nicht funktionieren können!). Die haben doch bestimmt auch Fehlermeldungen ausgegeben beim Versuch sie auszuführen.
 
Zurück
Oben