add another gstreamer link
[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 ## WebRTC
15 gstreamer has a WebRTC implementation.
16 The examples at https://github.com/centricular/gstwebrtc-demos.git work once
17
18     export OPENSSL_CONF=''
19
20 has been set (see https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/811)
21
22 Another maybe helpful link: https://developer.ridgerun.com/wiki/index.php?title=GstWebRTC_-_H264-Opus_Examples#Receive_Pipeline
23
24 Also: https://developer.ridgerun.com/wiki/index.php?title=GstWebRTC_Pipelines
25
26 # VLC
27 Note that you have to close VLC and open it again for new streaming as VLC leaves the connections
28 open (I spent hours figuring out why http based streaming doesn't work - `netstat -4 --ip` is nice
29 for debugging in that respect).
30
31 ## RTP
32 ### Source
33 The address has to be the address where the video should be streamed **to**. In the following
34 examples, a multicast address is used. It is either the IP address of the device receiving the video (unicast address) or a multicast address 
35 like 239.255.12.42 (multicast addresses are between 224.0.0.0 and 239.255.255.255, some of
36 them being reserved, 239.0.0.0 to 239.255.255.255 are Organization-Local Scope so they are
37 good candidates, see
38 https://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml).
39
40     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
41     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
42     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
43     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
44
45 ### Player
46     cvlc rtp://239.255.12.42
47
48
49 ## RTSP
50 For VLC, RTSP means RTSP combined with RTP.
51
52 ### Source
53 We assume that the video source computer has the external IP 192.168.1.54.
54 Instead of rtsp://192.168.1.54:8554/ we could also use rtsp://192.168.1.54:8554/mystream.sdp
55
56     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
57     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
58
59
60 ### Player
61 The address needs to be the address of the source. Note the backslash at the end.
62
63     vlc rtsp://192.168.1.54:8554/
64
65
66 ## VLC Remarks
67 * Latency: The following options are said to reduce latency:
68
69       --network-caching=150 --clock-jitter=0 --clock-synchro=0
70
71 * Duplicating a stream is nice for debugging:
72
73       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
74       cvlc rtp://239.255.12.42
75
76
77 ## HTTP
78 The address at the source side has to be the external one of the local computer.
79
80 ### Source (server)
81     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
82
83 # Player (client)
84
85     vlc http://192.168.1.54:8080
86
87
88 # Kodi
89 The player built into code knows at least the following streaming protocols: http, rtsp.
90
91 https://kodi.wiki/index.php?title=Internet_video_and_audio_streams