Open TheChymera opened 2 years ago
You can output to v4l2 (virtual camera, search for v4l2loopback
) with the following command:
yes | wf-recorder -t --muxer=v4l2 --codec=rawvideo --pixel-format=yuv420p --file=/dev/video0
Where /dev/video0 is the virtual device created by v4l2. This works for screen sharing in web apps like jitsi, so you can probably build on top of this.
@git-bruh I have tried that workaround for videoconferencing, but is there any way to do this without that extra bit of potentially unreliable infrastructure? (among other things web apps will messes up the resolution and apply compression formats which might be good for faces but not for text) Can I just select a remotely accessible file to upload to via SSH? What would be the formats that would allow viewing a file which is actively being written to?
This is only lightly tested but I am able to stream desktop to html page with v4l2loopback. Here's what worked for me:
Assumptions:
Insert the following html: Head:
<link href="https://vjs.zencdn.net/7.2.3/video-js.css" rel="stylesheet">
Body:
<video id='video-stream' class="video-js vjs-default-skin center" width="640" height="480" controls>
<source type="application/x-mpegURL" src="streams/desktop-stream1.m3u8">
</video>
Scripts:
<script src="https://vjs.zencdn.net/ie8/ie8-version/videojs-ie8.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.14.1/videojs-contrib-hls.js"></script>
<script src="https://vjs.zencdn.net/7.2.3/video.js"></script>
<script>
var player = videojs('video-stream');
player.play();
</script>
where 'streams/desktop-stream1.m3u8' is a path relative to the html file. Then, setup the video stream by running these commands:
sudo modprobe v4l2loopback exclusive_caps=1 card_label=desktop_view1
wf-recorder --muxer=v4l2 --codec=rawvideo --file=/dev/video2 -x yuv420p -t
ffmpeg -i /dev/video2 -an /var/www/website/streams/desktop-stream1.m3u8
At this point, you should be able to refresh the page and play the video.
As an alternative, you could try to set up an rtmp server and do something like what I tried to describe in #172
This is only lightly tested but I am able to stream desktop to html page with v4l2loopback. Here's what worked for me:
Assumptions:
- apache or some way to serve a webpage
- ffmpeg installed
- v4l2loopback module installed
- wf-recorder installed
- the web server is running on the same machine running wayfire
Insert the following html: Head:
<link href="https://vjs.zencdn.net/7.2.3/video-js.css" rel="stylesheet">
Body:
<video id='video-stream' class="video-js vjs-default-skin center" width="640" height="480" controls> <source type="application/x-mpegURL" src="streams/desktop-stream1.m3u8"> </video>
Scripts:
<script src="https://vjs.zencdn.net/ie8/ie8-version/videojs-ie8.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.14.1/videojs-contrib-hls.js"></script> <script src="https://vjs.zencdn.net/7.2.3/video.js"></script> <script> var player = videojs('video-stream'); player.play(); </script>
where 'streams/desktop-stream1.m3u8' is a path relative to the html file. Then, setup the video stream by running these commands:
sudo modprobe v4l2loopback exclusive_caps=1 card_label=desktop_view1
wf-recorder --muxer=v4l2 --codec=rawvideo --file=/dev/video2 -x yuv420p -t
ffmpeg -i /dev/video2 -an /var/www/website/streams/desktop-stream1.m3u8
At this point, you should be able to refresh the page and play the video.
hi soreau, is there any latency in video playing ?
hi soreau, is there any latency in video playing ?
Yes, there is.
Is there any way to use
wf-recorder
to cast my screen via HTTP? I was thinking perhaps the output could be piped via SSH to a publicly accessible video file... I haven't gotten that far yet, since even locally, the output file ofwf-recorder -f myout.mp4
cannot be played before wf-recorder is closed.Any ideas whether this could be done somehow? Screencasting soltuions for wayland tend to either not work or be quite convoluted, it would be really great if this could be done with a few chained bash commands.