bitmap stream to video in c# howto?












-1















I have a code that receives a video stream through the webrtc library, which in its function shows them in a PictureBox, my question is .. how to pass that stream from the PictureBoxto a video on my computer?



public unsafe void OnRenderRemote(byte* yuv, uint w, uint h)
{
lock (pictureBoxRemote)
{
if (0 == encoderRemote.EncodeI420toBGR24(yuv, w, h, ref bgrBuffremote, true))
{
if (remoteImg == null)
{
var bufHandle = GCHandle.Alloc(bgrBuffremote, GCHandleType.Pinned);
remoteImg = new Bitmap((int)w, (int)h, (int)w * 3, PixelFormat.Format24bppRgb, bufHandle.AddrOfPinnedObject());
}
}
}

try
{
Invoke(renderRemote, this);
}
catch // don't throw on form exit
{
}
}


This code receives the stream through webrtc and converts it into images that are then shown in a PictureBoxcalling this function .. my question is:



How can I save an array or buffer of remoteImg images so I can write it to a video file on my pc?



Try doing something like this:



FileWriter.Open ("C:\Users\assa\record.avi", (int) w, (int) h, (int) w * 3, VideoCodec.Default, 5000000);
FileWriter.WriteVideoFrame (remoteImg);


but only saves a single capture and not a video, is there any way to save the images of the stream with the OnRenderRemote function (described above) to be able to save them in a video?



OnRenderRemote only updates the PictureBox every time it is called, but I do not know how to save that flow in a video.



Thanks.










share|improve this question





























    -1















    I have a code that receives a video stream through the webrtc library, which in its function shows them in a PictureBox, my question is .. how to pass that stream from the PictureBoxto a video on my computer?



    public unsafe void OnRenderRemote(byte* yuv, uint w, uint h)
    {
    lock (pictureBoxRemote)
    {
    if (0 == encoderRemote.EncodeI420toBGR24(yuv, w, h, ref bgrBuffremote, true))
    {
    if (remoteImg == null)
    {
    var bufHandle = GCHandle.Alloc(bgrBuffremote, GCHandleType.Pinned);
    remoteImg = new Bitmap((int)w, (int)h, (int)w * 3, PixelFormat.Format24bppRgb, bufHandle.AddrOfPinnedObject());
    }
    }
    }

    try
    {
    Invoke(renderRemote, this);
    }
    catch // don't throw on form exit
    {
    }
    }


    This code receives the stream through webrtc and converts it into images that are then shown in a PictureBoxcalling this function .. my question is:



    How can I save an array or buffer of remoteImg images so I can write it to a video file on my pc?



    Try doing something like this:



    FileWriter.Open ("C:\Users\assa\record.avi", (int) w, (int) h, (int) w * 3, VideoCodec.Default, 5000000);
    FileWriter.WriteVideoFrame (remoteImg);


    but only saves a single capture and not a video, is there any way to save the images of the stream with the OnRenderRemote function (described above) to be able to save them in a video?



    OnRenderRemote only updates the PictureBox every time it is called, but I do not know how to save that flow in a video.



    Thanks.










    share|improve this question



























      -1












      -1








      -1








      I have a code that receives a video stream through the webrtc library, which in its function shows them in a PictureBox, my question is .. how to pass that stream from the PictureBoxto a video on my computer?



      public unsafe void OnRenderRemote(byte* yuv, uint w, uint h)
      {
      lock (pictureBoxRemote)
      {
      if (0 == encoderRemote.EncodeI420toBGR24(yuv, w, h, ref bgrBuffremote, true))
      {
      if (remoteImg == null)
      {
      var bufHandle = GCHandle.Alloc(bgrBuffremote, GCHandleType.Pinned);
      remoteImg = new Bitmap((int)w, (int)h, (int)w * 3, PixelFormat.Format24bppRgb, bufHandle.AddrOfPinnedObject());
      }
      }
      }

      try
      {
      Invoke(renderRemote, this);
      }
      catch // don't throw on form exit
      {
      }
      }


      This code receives the stream through webrtc and converts it into images that are then shown in a PictureBoxcalling this function .. my question is:



      How can I save an array or buffer of remoteImg images so I can write it to a video file on my pc?



      Try doing something like this:



      FileWriter.Open ("C:\Users\assa\record.avi", (int) w, (int) h, (int) w * 3, VideoCodec.Default, 5000000);
      FileWriter.WriteVideoFrame (remoteImg);


      but only saves a single capture and not a video, is there any way to save the images of the stream with the OnRenderRemote function (described above) to be able to save them in a video?



      OnRenderRemote only updates the PictureBox every time it is called, but I do not know how to save that flow in a video.



      Thanks.










      share|improve this question
















      I have a code that receives a video stream through the webrtc library, which in its function shows them in a PictureBox, my question is .. how to pass that stream from the PictureBoxto a video on my computer?



      public unsafe void OnRenderRemote(byte* yuv, uint w, uint h)
      {
      lock (pictureBoxRemote)
      {
      if (0 == encoderRemote.EncodeI420toBGR24(yuv, w, h, ref bgrBuffremote, true))
      {
      if (remoteImg == null)
      {
      var bufHandle = GCHandle.Alloc(bgrBuffremote, GCHandleType.Pinned);
      remoteImg = new Bitmap((int)w, (int)h, (int)w * 3, PixelFormat.Format24bppRgb, bufHandle.AddrOfPinnedObject());
      }
      }
      }

      try
      {
      Invoke(renderRemote, this);
      }
      catch // don't throw on form exit
      {
      }
      }


      This code receives the stream through webrtc and converts it into images that are then shown in a PictureBoxcalling this function .. my question is:



      How can I save an array or buffer of remoteImg images so I can write it to a video file on my pc?



      Try doing something like this:



      FileWriter.Open ("C:\Users\assa\record.avi", (int) w, (int) h, (int) w * 3, VideoCodec.Default, 5000000);
      FileWriter.WriteVideoFrame (remoteImg);


      but only saves a single capture and not a video, is there any way to save the images of the stream with the OnRenderRemote function (described above) to be able to save them in a video?



      OnRenderRemote only updates the PictureBox every time it is called, but I do not know how to save that flow in a video.



      Thanks.







      c# video bitmap stream






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Dec 30 '18 at 13:13









      JPVenson

      442316




      442316










      asked Dec 29 '18 at 18:28









      jklsdhsdfklhdfskl gjvhjiljklsdhsdfklhdfskl gjvhjil

      11




      11
























          1 Answer
          1






          active

          oldest

          votes


















          0














          First: i do not know how the webrtc works exactly, but i can explain you how you must process the images to save them into a file.



          Ok lets start: You currently have only full sized bitmaps of your own that are coming from the lib. That is just fine as long as you do not care about file size and you only want to show the "latest" frame. To store multiple frames into a file that we would call a "video" you need an encoder that processes those frames together.



          Complicated things simple: An encoder takes 2 frames, call them Frame A and B and then compresses them in a way that only changes from Frame A to frame B are saved. This saves a lot of storage because in a video we only want to see "changes" aka movments from one frame to another. There are quite a lot of encoders out there but mostly you can see ffmpeg out there, its very popular and there are quite a lot c# wrappers for it so take a look.



          Summery: to make 2-x images a "video" you have the process them with an encoder that processes the images in a format that can be played by a video player.






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53972260%2fbitmap-stream-to-video-in-c-sharp-howto%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            First: i do not know how the webrtc works exactly, but i can explain you how you must process the images to save them into a file.



            Ok lets start: You currently have only full sized bitmaps of your own that are coming from the lib. That is just fine as long as you do not care about file size and you only want to show the "latest" frame. To store multiple frames into a file that we would call a "video" you need an encoder that processes those frames together.



            Complicated things simple: An encoder takes 2 frames, call them Frame A and B and then compresses them in a way that only changes from Frame A to frame B are saved. This saves a lot of storage because in a video we only want to see "changes" aka movments from one frame to another. There are quite a lot of encoders out there but mostly you can see ffmpeg out there, its very popular and there are quite a lot c# wrappers for it so take a look.



            Summery: to make 2-x images a "video" you have the process them with an encoder that processes the images in a format that can be played by a video player.






            share|improve this answer




























              0














              First: i do not know how the webrtc works exactly, but i can explain you how you must process the images to save them into a file.



              Ok lets start: You currently have only full sized bitmaps of your own that are coming from the lib. That is just fine as long as you do not care about file size and you only want to show the "latest" frame. To store multiple frames into a file that we would call a "video" you need an encoder that processes those frames together.



              Complicated things simple: An encoder takes 2 frames, call them Frame A and B and then compresses them in a way that only changes from Frame A to frame B are saved. This saves a lot of storage because in a video we only want to see "changes" aka movments from one frame to another. There are quite a lot of encoders out there but mostly you can see ffmpeg out there, its very popular and there are quite a lot c# wrappers for it so take a look.



              Summery: to make 2-x images a "video" you have the process them with an encoder that processes the images in a format that can be played by a video player.






              share|improve this answer


























                0












                0








                0







                First: i do not know how the webrtc works exactly, but i can explain you how you must process the images to save them into a file.



                Ok lets start: You currently have only full sized bitmaps of your own that are coming from the lib. That is just fine as long as you do not care about file size and you only want to show the "latest" frame. To store multiple frames into a file that we would call a "video" you need an encoder that processes those frames together.



                Complicated things simple: An encoder takes 2 frames, call them Frame A and B and then compresses them in a way that only changes from Frame A to frame B are saved. This saves a lot of storage because in a video we only want to see "changes" aka movments from one frame to another. There are quite a lot of encoders out there but mostly you can see ffmpeg out there, its very popular and there are quite a lot c# wrappers for it so take a look.



                Summery: to make 2-x images a "video" you have the process them with an encoder that processes the images in a format that can be played by a video player.






                share|improve this answer













                First: i do not know how the webrtc works exactly, but i can explain you how you must process the images to save them into a file.



                Ok lets start: You currently have only full sized bitmaps of your own that are coming from the lib. That is just fine as long as you do not care about file size and you only want to show the "latest" frame. To store multiple frames into a file that we would call a "video" you need an encoder that processes those frames together.



                Complicated things simple: An encoder takes 2 frames, call them Frame A and B and then compresses them in a way that only changes from Frame A to frame B are saved. This saves a lot of storage because in a video we only want to see "changes" aka movments from one frame to another. There are quite a lot of encoders out there but mostly you can see ffmpeg out there, its very popular and there are quite a lot c# wrappers for it so take a look.



                Summery: to make 2-x images a "video" you have the process them with an encoder that processes the images in a format that can be played by a video player.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Dec 30 '18 at 9:53









                JPVensonJPVenson

                442316




                442316






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53972260%2fbitmap-stream-to-video-in-c-sharp-howto%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Mossoró

                    Error while reading .h5 file using the rhdf5 package in R

                    Pushsharp Apns notification error: 'InvalidToken'