39008532ca6315cc782494ccfecf391a1ac0315b
[toast/stream2beamer.git] / stream2beamer.md
1 # Stream Desktop/Video/Webcam to Kodi/Beamer/other PCs
2 Gregor and I had a closer look at the following projects:
3
4 # Laplace
5 Simple WebRTC implementation in GO: https://github.com/adamyordan/laplace.git
6 Simple to compile and just works.
7 WebRTC actually uses SRTP (Secure Real-time Transport Protocol). 
8
9 IPv6+IPv4, and no TLS:
10
11     ./laplace -addr "[::]:8080" -tls=false
12
13 # gstreamer
14 * Supports RTP
15 * Supports webcam capture via v4l (video for linux)
16 * Supports screen capture via xmanager/ximagesrc
17 * Interesting URLs:
18   * WebRTC in one direction only: https://stackoverflow.com/questions/57430215/how-to-use-webrtcbin-create-offer-only-receive-video
19   * gstreamer to VLC via RTP: https://stackoverflow.com/questions/13154983/gstreamer-rtp-stream-to-vlc
20   * https://github.com/intel/gstreamer-media-SDK/issues/138
21   * https://developer.ridgerun.com/wiki/index.php?title=GstWebRTC_Pipelines
22   * https://developer.ridgerun.com/wiki/index.php?title=GstWebRTC_-_H264-Opus_Examples#Receive_Pipeline
23
24 ## WebRTC
25 gstreamer has a WebRTC implementation.
26 The examples at https://github.com/centricular/gstwebrtc-demos.git work once
27
28     export OPENSSL_CONF=''
29
30 has been set (see https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/811)
31
32 ## gstreamer examples
33     gst-launch-1.0 -v playbin uri=file:///home/philipp/tmp/GerisGame.mp4
34     
35     
36 # VLC
37 Note that you have to close VLC and open it again for new streaming as VLC leaves the connections
38 open (I spent hours figuring out why http based streaming doesn't work - `netstat -4 --ip` is nice
39 for debugging in that respect).
40
41 ## RTP
42 ### Source
43 The address has to be the address where the video should be streamed **to**. In the following
44 examples, a multicast address is used. It is either the IP address of the device receiving the video (unicast address) or a multicast address 
45 like 239.255.12.42 (multicast addresses are between 224.0.0.0 and 239.255.255.255, some of
46 them being reserved, 239.0.0.0 to 239.255.255.255 are Organization-Local Scope so they are
47 good candidates, see
48 https://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml).
49
50     cvlc -vv --sout '#transcode{vcodec=h264,acodec=mpga,channels=2,vb=800,ab=128}:rtp{mux=ts,dst=239.255.12.42,sdp=sap,name="Geris Game"}' GerisGame.mp4
51     cvlc -vv --sout '#transcode{vcodec=h264,acodec=mpga,ab=128,channels=2,samplerate=44100,scodec=none}:rtp{dst=239.255.12.42,port=5004,mux=ts,sap,name=Geris Game}' :no-sout-all :sout-keep GerisGame.mp4
52     cvlc -vv --sout '#transcode{vcodec=h264,acodec=mpga,channels=2}:rtp{mux=ts,dst=239.255.12.42,sdp=sap,name="Videokamera"}' v4l2:///dev/video0 # long latency
53     cvlc -vv --sout '#transcode{vcodec=h264,acodec=mpga,channels=2}:rtp{mux=ts,dst=239.255.12.42,sdp=sap,name="Desktop"}' screen:// # not convincing
54
55 ### Player
56     cvlc rtp://239.255.12.42
57
58
59 ## RTSP
60 For VLC, RTSP means RTSP combined with RTP.
61
62 ### Source
63 We assume that the video source computer has the external IP 192.168.1.54.
64 Instead of rtsp://192.168.1.54:8554/ we could also use rtsp://192.168.1.54:8554/mystream.sdp
65
66     cvlc -vv --sout '#transcode{vcodec=h264,acodec=mpga,ab=128,channels=2,samplerate=44100,scodec=none}:rtp{sdp=rtsp://:8554/}' :no-sout-all :sout-keep GerisGame.mp4
67     cvlc -vv --sout '#rtp{dst=239.255.12.42,port=1234,sdp=rtsp://192.168.1.54:8554/}' :no-sout-all :sout-keep GerisGame.mp4
68
69
70 ### Player
71 The address needs to be the address of the source. Note the backslash at the end.
72
73     vlc rtsp://192.168.1.54:8554/
74
75
76 ## VLC Remarks
77 * Latency: The following options are said to reduce latency:
78
79       --network-caching=150 --clock-jitter=0 --clock-synchro=0
80
81 * Duplicating a stream is nice for debugging:
82
83       cvlc -vv --sout '#duplicate{dst=display,dst="transcode{vcodec=h264,acodec=mpga,channels=2,vb=800,ab=128}:rtp{mux=ts,dst=239.255.12.42,sdp=sap,name=Geris Game}"}' GerisGame.mp4
84       cvlc rtp://239.255.12.42
85
86
87 ## HTTP
88 The address at the source side has to be the external one of the local computer.
89
90 ### Source (server)
91     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
92
93 ### Player (client)
94
95     vlc http://192.168.1.54:8080
96
97
98 # Kodi
99 The player built into code knows at least the following streaming protocols: http, rtsp.
100
101 https://kodi.wiki/index.php?title=Internet_video_and_audio_streams