X-Git-Url: https://git.toastfreeware.priv.at/toast/stream2beamer.git/blobdiff_plain/22587362ed12f39ab423c69eeb5c5769612d298d..cfcb3a3892ccea7e0168d707f8aa31851ad5a438:/stream2beamer.md?ds=sidebyside diff --git a/stream2beamer.md b/stream2beamer.md index 081cef0..8fe72e4 100644 --- a/stream2beamer.md +++ b/stream2beamer.md @@ -10,7 +10,24 @@ IPv6+IPv4, and no TLS: ./laplace -addr "[::]:8080" -tls=false +## WebRTC signaling + +* https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Signaling_and_video_calling +* https://www.tutorialspoint.com/webrtc/webrtc_signaling.htm +* https://www.html5rocks.com/en/tutorials/webrtc/infrastructure/ +* https://github.com/topics/webrtc-signaling + # gstreamer +* Supports RTP +* Supports webcam capture via v4l (video for linux) +* Supports screen capture via xmanager/ximagesrc +* Interesting URLs: + * WebRTC in one direction only: https://stackoverflow.com/questions/57430215/how-to-use-webrtcbin-create-offer-only-receive-video + * gstreamer to VLC via RTP: https://stackoverflow.com/questions/13154983/gstreamer-rtp-stream-to-vlc + * https://github.com/intel/gstreamer-media-SDK/issues/138 + * https://developer.ridgerun.com/wiki/index.php?title=GstWebRTC_Pipelines + * https://developer.ridgerun.com/wiki/index.php?title=GstWebRTC_-_H264-Opus_Examples#Receive_Pipeline + ## WebRTC gstreamer has a WebRTC implementation. The examples at https://github.com/centricular/gstwebrtc-demos.git work once @@ -19,9 +36,90 @@ The examples at https://github.com/centricular/gstwebrtc-demos.git work once has been set (see https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/811) -Another maybe helpful link: https://developer.ridgerun.com/wiki/index.php?title=GstWebRTC_-_H264-Opus_Examples#Receive_Pipeline +There's a new recvonly example: + +* https://github.com/centricular/gstwebrtc-demos/commit/000cfb6cd817ca0f07d761795b352a8b8b9074f8 +* `sendonly/webrtc-recvonly-h264.c` + +## gstreamer examples + gst-launch-1.0 -v playbin uri=file:///home/philipp/tmp/GerisGame.mp4 + + # send + gst-launch-1.0 ximagesrc ! videoconvert ! videoscale ! video/x-raw,width=800,height=600 ! vp8enc ! rtpvp8pay ! udpsink host=239.255.12.42 port=5004 + # receive + gst-launch-1.0 udpsrc address=239.255.12.42 port=5004 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)VP8-DRAFT-IETF-01, payload=(int)96, ssrc=(uint)2990747501, clock-base=(uint)275641083, seqnum-base=(uint)34810" ! rtpvp8depay ! vp8dec ! autovideosink + + # send + gst-launch-1.0 -v ximagesrc ! videoconvert ! videoscale ! video/x-raw,format=I420,width=800,height=600,framerate=25/1 ! jpegenc ! rtpjpegpay ! udpsink host=239.255.12.42 port=5004 + # receive + gst-launch-1.0 udpsrc address=239.255.12.42 port=5004 ! application/x-rtp,encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink + + +* https://stackoverflow.com/questions/33747500/using-gstreamer-to-capture-screen-and-show-it-in-a-window/33822024#33822024 +* http://www.einarsundgren.se/gstreamer-basic-real-time-streaming-tutorial/ +* https://gist.github.com/tetkuz/0c038321d05586841897 +* https://gist.github.com/esrever10/7d39fe2d4163c5b2d7006495c3c911bb +* https://gist.github.com/nebgnahz/26a60cd28f671a8b7f522e80e75a9aa5 +* https://salsa.debian.org/debconf-video-team/ansible/-/blob/master/roles/voctomix/templates/videoteam-stream.j2 +* https://github.com/xfxf/video-scripts/blob/master/michael/youtube-live.sh + (and others in the same repo) + +## gstreamer webrtc, another example + +* blog post: https://aweirdimagination.net/2020/07/05/gstreamer-webrtc/ +* code: https://git.aweirdimagination.net/perelman/minimal-webrtc-gstreamer + +## websockets + +connecting to websockets (plus gstreamer and v4l2sink) + +https://michael.stapelberg.ch/posts/2020-06-06-iphone-camera-linux-v4l2loopback/ + + # send + laplace / chromium + + # receive + websocat --insecure "wss://localhost:8080/ws_connect?id=cranky_kind_chipmunk" + +## more v4l2loopback/v4l2sink + + # send + gst-launch-1.0 videotestsrc ! v4l2sink device=/dev/video42 + + # receive + cvlc v4l2:///dev/video42 + +## SRT and gstreamer + +* https://github.com/Haivision/srt/blob/master/docs/gstreamer.md +* https://srtlab.github.io/srt-cookbook/ + +## gstreamer and rtsp + +working minimal example: https://github.com/Enne2/PyGObject-GstRtspServer/blob/master/rtsp-server.py + +other maybe helpful links (for getting an existing pipeline streamed): + +* https://stackoverflow.com/questions/52562499/is-it-possible-to-stream-an-existing-gstreamer-pipeline-through-gstrtspserver +* http://gstreamer-devel.966125.n4.nabble.com/Continuously-streaming-a-video-file-code-review-td4671364.html +* https://stackoverflow.com/questions/59858898/how-to-convert-a-video-on-disk-to-a-rtsp-stream +* http://gstreamer-devel.966125.n4.nabble.com/RTSP-Server-from-a-manually-created-and-linked-pipeline-td4680305.html +* http://gstreamer-devel.966125.n4.nabble.com/Using-C-API-based-pipelines-in-RTSP-server-without-quot-launch-quot-arg-td4680144.html +* RTSP on_media_configure and appsrc: https://github.com/GStreamer/gst-rtsp-server/blob/master/examples/test-appsrc.c +* Link two pipelines: http://gstreamer-devel.966125.n4.nabble.com/Two-pipelines-link-them-merge-them-easy-handling-td4686753.html + +a "relay" between cameras and rtsp, in rust: + +* https://github.com/thirtythreeforty/neolink + +## gstreamer: from udp to rtsp + +* http://trac.gateworks.com/wiki/Yocto/gstreamer/streaming + +## HLS -Also: https://developer.ridgerun.com/wiki/index.php?title=GstWebRTC_Pipelines +or gstreamer's `hlssink(2)`, if we want to serve files via HTTP and kodi can +read/play .m3u8 playlist # VLC Note that you have to close VLC and open it again for new streaming as VLC leaves the connections @@ -80,7 +178,7 @@ The address at the source side has to be the external one of the local computer. ### Source (server) cvlc -vv --sout '#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128}:standard{access=http,mux=ogg,dst=0.0.0.0:8080}' GerisGame.mp4 -# Player (client) +### Player (client) vlc http://192.168.1.54:8080