Ejemplo n.º 1
0
        /// <summary>
        /// This is a javascript application.
        /// </summary>
        /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param>
        public Application(IDefault page)
        {
            // http://blog.teamtreehouse.com/accessing-the-device-camera-with-getusermedia
            // http://stackoverflow.com/questions/11539689/why-localstreams-contains-localmediastream-and-remotestreams-contains-mediastrea
            // https://developer.mozilla.org/en-US/docs/Web/API/Navigator.getUserMedia
            // http://neave.github.io/face-detection/


            var navigator = (NavigatorUserMedia)(object)Native.window.navigator;

            var successCallback =
                new Action <LocalMediaStream>(
                    localMediaStream =>
            {
                Console.WriteLine("got video");

                //var src = (string)new IFunction("return window.URL.createObjectURL(this);").apply(localMediaStream);

                var v = new IHTMLVideo {
                    src = localMediaStream.ToObjectURL()
                }.AttachToDocument();

                v.play();
            }
                    );

            var errorCallback =
                new Action <NavigatorUserMediaError>(
                    e =>
            {
                // restart on error? :P
                Native.window.alert("no video: " + new { e.code });
            }
                    );

            //var a = 1;

            //var c = new MediaStreamConstraints { video = a == 1, audio = a == 0 };

            //var o = new IFunction("return {video: true};").apply(null);


            navigator.webkitGetUserMedia(
                new { video = true, audio = false },
                successCallback: IFunction.OfDelegate(
                    successCallback
                    ),
                errorCallback: IFunction.OfDelegate(
                    errorCallback
                    )
                );

            @"Hello world".ToDocumentTitle();
            // Send data from JavaScript to the server tier
            service.WebMethod2(
                @"A string from JavaScript.",
                value => value.ToDocumentTitle()
                );
        }
Ejemplo n.º 2
0
        /// <summary>
        /// This is a javascript application.
        /// </summary>
        /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param>
        public Application(IApp page)
        {
            // http://www.brucelawson.co.uk/2012/specifying-which-camera-in-getusermedia/
            // https://groups.google.com/forum/#!topic/discuss-webrtc/xLBdsLz_Mbw
            // http://stackoverflow.com/questions/15322622/using-multiple-usb-cameras-with-web-rtc

            // dont we have async available?
            Native.window.navigator.getUserMedia(
                stream =>
            {
                // getUserMedia error { code = , message = , name = DevicesNotFoundError }


                var v = new IHTMLVideo {
                    src = stream.ToObjectURL()
                };

                v.AttachToDocument();

                v.play();

                new IHTMLButton {
                    innerText = "record frame"
                }.AttachToDocument().onclick +=
                    delegate
                {
                    // Uncaught IndexSizeError: Index or size was negative, or greater than the allowed value.
                    var c = new CanvasRenderingContext2D(v.clientWidth, v.clientHeight);

                    c.drawImage(
                        v, 0, 0, c.canvas.width, c.canvas.height
                        );

                    var bytes = c.bytes;

                    c.canvas.AttachToDocument();
                };

                new IHTMLButton {
                    innerText = "record gif"
                }.AttachToDocument().WhenClicked(

                    async btn =>
                {
                    btn.disabled = true;


                    var frames = new List <byte[]>();
                    var x      = v.clientWidth;
                    var y      = v.clientHeight;

                    //new Timer(
                    //    async tt =>
                    //    {


                    btn.innerText = "rec " + new { frames.Count }.ToString();
                    //while (frames.Count < 60)

                    //while (frames.Count < 20)
                    while (frames.Count < 2)

                    // works with two frames.
                    // are we logging too much data?

                    // cant we hop to another thread in bytes instead yet?
                    // https://sites.google.com/a/jsc-solutions.net/work/knowledge-base/15-dualvr/20160108
                    // are we encoding grame bytes as base64?

                    {
                        await Task.Delay(1000 / 5);

                        btn.innerText = new { frames.Count }.ToString();

                        var bytes = v.bytes;

                        Console.WriteLine(new { bytes.Length });

                        // script: error JSC1000: No implementation found for this native method, please implement
                        // [System.Threading.Tasks.TaskFactory`1.
                        // StartNew(, System.Object, System.Threading.CancellationToken, System.Threading.Tasks.TaskCreationOptions, System.Threading.Tasks.TaskScheduler)]

                        frames.Add(bytes);
                    }


                    Console.WriteLine("encoding!");

                    var e = new Stopwatch();
                    e.Start();


                    // crashes the browser why???
                    var src = await new GIFEncoderWorker(
                        x,
                        y,
                        delay: 1000 / 10,
                        frames: frames,
                        AtFrame:
                        async index =>
                    {
                        btn.innerText = new { index, frames.Count }.ToString();

                        if (index == frames.Count - 1)
                        {
                            btn.style.color = "blue";
                            await Task.Delay(800);
                            btn.style.color = "";

                            btn.innerText = "record gif";
                        }
                    }


                        );


                    Console.WriteLine("done! " + new { e.Elapsed });

                    new IHTMLImage {
                        src = src
                    }.AttachToDocument();


                    btn.disabled = false;


                    btn.title = new { e.Elapsed, src.Length }.ToString();
                }
                    );
            }
                );
        }
Ejemplo n.º 3
0
        /// <summary>
        /// This is a javascript application.
        /// </summary>
        /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param>
        public Application(IApp page)
        {
            Native.document.body.Clear();
            Native.document.body.style.margin  = "0px";
            Native.document.body.style.padding = "0px";

            // http://stackoverflow.com/questions/11294836/streaming-mp4-with-vlc-to-html-browser

            // In XHTML, attribute minimization is forbidden, and the controls attribute must be defined as <video controls="controls">.

            // ogg wont show up on gearvr?

            //var v = new IHTMLVideo { src = "http://192.168.1.12:8080/x.ogg", controls = true }.AttachToDocument();

            // chrome displays 1 still and crashes on webm play. vlc shows black.
            // gearvr stays white.
            //var v = new IHTMLVideo { src = "http://192.168.1.12:8080/x.webm", controls = true }.AttachToDocument();

            // chrome stays black.
            var v = new IHTMLVideo {
                src = "http://192.168.1.12:8080/x.mp4", controls = true
            }.AttachToDocument();

            // this works in gearvr!
            //var v = new IHTMLVideo { src = "https://broken-links.com/tests/media/BigBuck.webm", controls = true }.AttachToDocument();
            //var v = new IHTMLVideo { src = "https://broken-links.com/tests/media/BigBuck.theora.ogv", controls = true }.AttachToDocument();

            // run in console session?
            // vlc goes crazy!
            // "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe"  –no-sse2 –no-sse41 -vvv "X:\media\Abraham Hicks - Is There Value In Being Vulnerable Or Open (2014).mp4" --sout '#transcode{vcodec=VP80,vb=800,scale=1,acodec=vorbis,ab=128,channels=2}:standard{access=http,mux="ffmpeg{mux=webm}",dst=192.168.1.12:8080/x.webm}'
            // "X:\util\vlc-2.2.1-win32\vlc-2.2.1\vlc.exe" --intf dummy --verbose  -vvv "X:\media\Abraham Hicks - Is There Value In Being Vulnerable Or Open (2014).mp4" vlc://quit --sout '#transcode{vcodec=VP80,vb=800,scale=1,acodec=vorbis,ab=128,channels=2}:standard{access=http,mux="ffmpeg{mux=webm}",dst=192.168.1.12:8080/x.webm}'
            // "X:\util\vlc-2.2.1-win32\vlc-2.2.1\vlc.exe" --no-loop --intf dummy --verbose  -vvv "X:\media\Abraham Hicks - Is There Value In Being Vulnerable Or Open (2014).mp4" --sout '#transcode{vcodec=VP80,vb=800,scale=1,acodec=vorbis,ab=128,channels=2}:standard{access=http,mux="ffmpeg{mux=webm}",dst=192.168.1.12:8080/x.webm}'



            // http://stackoverflow.com/questions/5087687/howto-encode-webm-using-command-line-vlc

            // [0276ac3c] core input error: cannot start stream output instance, aborting
            //[006a75f4] stream_out_standard stream out error: no mux specified or found by extension

            // cvlc my_first_video.avi  –sout “#transcode{vcodec=VP80,vb=800,scale=1,acodec=vorbis,ab=128,channels=2}:std{access=file,mux=”ffmpeg{mux=webm}”,dst=my_first_video.webm}”
            //(note:


            //[02130d24] dummy interface: VLC media player - 2.2.1 Terry Pratchett (Weatherwax)
            //[02130d24] dummy interface: Copyright © 1996-2015 the VideoLAN team
            //[02130d24] dummy interface:
            //Warning: if you cannot access the GUI anymore, open a command-line window, go to the directory where you installed VLC and run "vlc -I qt"

            //[02130d24] dummy interface: using the dummy interface module...
            //[0218d6a4] stream_out_standard stream out error: no mux specified or found by extension
            //[0218d60c] core stream output error: stream chain failed for `standard{mux="",access="'#transcode{vcodec=VP80,vb=800,scale=1,acodec=vorbis,ab=128,channels=2}",dst="standard{access=http,mux=ffmpeg{mux=webm},dst=192.168.1.12:8080/x.webm}'"}'
            //[0213cc3c] core input error: cannot start stream output instance, aborting



            // https://www.maketecheasier.com/mastering-vlc-via-the-command-line-linux/
            // http://alien.slackbook.org/blog/vlc-and-creating-webm-video/

            //What the VLC graphical interface can not yet do, is allow you to encode WebM video. Lucky for us, VLC has a command-line interface as well, with a humongous amount of options whose learning curve is even steeper than that of vi 😉

            //The VLC command-line allows to encode/transcode WebM video! Want to try it out?


            // view-source:https://broken-links.com/tests/video/
            //            <video id="video" autobuffer height="240" poster="../images/bbb_poster-360x240.jpg" width="360">
            //        <source src="../media/BigBuck.m4v">
            //        <source src="../media/BigBuck.webm" type="video/webm">
            //        <source src="../media/BigBuck.theora.ogv" type="video/ogg">
            //</video>



            //            Streaming / Transcoding failed:
            //VLC could not open the mp4a audio encoder.
            // https://www.broken-links.com/2010/07/30/encoding-video-for-android/


            // https://broken-links.com/tests/video/comparison.html


            //new IStyle(v)
            //{
            //    position = IStyle.PositionEnum.@fixed,
            //    left = "0px",
            //    top = "0px",
            //    right = "0px",
            //    bottom = "0px",
            //};

            new IStyle(v)
            {
                position = IStyle.PositionEnum.absolute,
                left     = "0px",
                top      = "0px",
                width    = "100%",
                height   = "100%",
            };


            // would jsc be able to be the overlay buffer?
        }