package main import ( "errors" "github.com/go-chi/chi" "gopkg.in/olahol/melody.v1" "log" "net/http" "time" ) func main() { r := chi.NewRouter() m := melody.New() m.Config.MaxMessageSize = 204800 r.Get("/", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "public/index.html") }) r.Get("/ws", func(w http.ResponseWriter, r *http.Request) { m.HandleRequest(w, r) }) // m.HandleMessageBinary(func(s *melody.Session, msg []byte) { m.BroadcastBinary(msg) }) log.Println("Starting server...") http.ListenAndServe(":3000", r) }
<style> #videoObjectHtml5ApiServer { width: 320px; height: 240px; background: #666; } </style> </head> <body> <!-- "" --> <video autoplay id="videoObjectHtml5ApiServer"></video> <script type="application/javascript"> var video = document.getElementById('videoObjectHtml5ApiServer'); // MediaDevices API, ( ) // getUserMedia , video if (navigator.mediaDevices.getUserMedia) { navigator.mediaDevices.getUserMedia({video: true}).then(function (stream) { // video , video.srcObject = s; }); } </script>
<style> #videoObjectHtml5ApiServer { width: 320px; height: 240px; background: #666; } </style> </head> <body> <!-- "" --> <video autoplay id="videoObjectHtml5ApiServer"></video> <script type="application/javascript"> var video = document.getElementById('videoObjectHtml5ApiServer'); // MediaDevices API, ( ) // getUserMedia , video if (navigator.mediaDevices.getUserMedia) { navigator.mediaDevices.getUserMedia({video: true}).then(function (stream) { // video , video.srcObject = s; var recorderOptions = { mimeType: 'video/webm; codecs=vp8' // webm vp8 }, mediaRecorder = new MediaRecorder(s, recorderOptions ); // MediaRecorder mediaRecorder.ondataavailable = function(e) { if (e.data && e.data.size > 0) { // e.data } } mediaRecorder.start(100); // 100 }); } </script>
<style> #videoObjectHtml5ApiServer { width: 320px; height: 240px; background: #666; } </style> </head> <body> <!-- "" --> <video autoplay id="videoObjectHtml5ApiServer"></video> <script type="application/javascript"> var video = document.getElementById('videoObjectHtml5ApiServer'); // MediaDevices API, ( ) // getUserMedia , video if (navigator.mediaDevices.getUserMedia) { navigator.mediaDevices.getUserMedia({video: true}).then(function (stream) { // video , video.srcObject = s; var recorderOptions = { mimeType: 'video/webm; codecs=vp8' // webm vp8 }, mediaRecorder = new MediaRecorder(s, recorderOptions ), // MediaRecorder socket = new WebSocket('ws://127.0.0.1:3000/ws'); mediaRecorder.ondataavailable = function(e) { if (e.data && e.data.size > 0) { // e.data socket.send(e.data); } } mediaRecorder.start(100); // 100 }).catch(function (err) { console.log(err); }); } </script>
<style> #videoObjectHtml5ApiServer { width: 320px; height: 240px; background: #666; } </style> </head> <body> <!-- "" --> <video autoplay id="videoObjectHtml5ApiServer"></video> <script type="application/javascript"> var video = document.getElementById('videoObjectHtml5ApiServer'), socket = new WebSocket('ws://127.0.0.1:3000/ws'), arrayOfBlobs = []; socket.addEventListener('message', function (event) { // "" arrayOfBlobs.push(event.data); // readChunk(); }); </script>
<style> #videoObjectHtml5ApiServer { width: 320px; height: 240px; background: #666; } </style> </head> <body> <!-- "" --> <video autoplay id="videoObjectHtml5ApiServer"></video> <script type="application/javascript"> var video = document.getElementById('videoObjectHtml5ApiServer'), socket = new WebSocket('ws://127.0.0.1:3000/ws'), mediaSource = new MediaSource(), // MediaSource vid2url = URL.createObjectURL(mediaSource), // URL arrayOfBlobs = [], sourceBuffer = null; // , - socket.addEventListener('message', function (event) { // "" arrayOfBlobs.push(event.data); // readChunk(); }); // MediaSource , // / // , , // , mediaSource.addEventListener('sourceopen', function() { var mediaSource = this; sourceBuffer = mediaSource.addSourceBuffer("video/webm; codecs=\"vp8\""); }); function readChunk() { var reader = new FileReader(); reader.onload = function(e) { // FileReader , // "" Uint8Array ( Blob) , // , / sourceBuffer.appendBuffer(new Uint8Array(e.target.result)); reader.onload = null; } reader.readAsArrayBuffer(arrayOfBlobs.shift()); } </script>
Source: https://habr.com/ru/post/461769/
All Articles