Local video stream not showing when using Camera2 API












0















Everything else in my app seems fine, both remote and local streams display just fine if I'm using Camera1 API. But, when I try and use the Camera2 API, the local video stream doesn't show anymore, a black screen shows instead. The local stream is still being displayed on the remote end though, and there's no error messages in the log either. The API is the only thing I changed in my code. Anyone knows what's going on here?



I came across a similar problem here, but it's outdated and not testable as setVideoHwAccelerationOptions() has been depreciated and the related stuff is being handled by coded factories as described here.



Here's my code for building these factories, in case that's helpful:



final VideoEncoderFactory encoderFactory;
final VideoDecoderFactory decoderFactory;
encoderFactory = new DefaultVideoEncoderFactory(
rootEglBase.getEglBaseContext(), true /* enableIntelVp8Encoder */, false);
decoderFactory = new DefaultVideoDecoderFactory(rootEglBase.getEglBaseContext());









share|improve this question





























    0















    Everything else in my app seems fine, both remote and local streams display just fine if I'm using Camera1 API. But, when I try and use the Camera2 API, the local video stream doesn't show anymore, a black screen shows instead. The local stream is still being displayed on the remote end though, and there's no error messages in the log either. The API is the only thing I changed in my code. Anyone knows what's going on here?



    I came across a similar problem here, but it's outdated and not testable as setVideoHwAccelerationOptions() has been depreciated and the related stuff is being handled by coded factories as described here.



    Here's my code for building these factories, in case that's helpful:



    final VideoEncoderFactory encoderFactory;
    final VideoDecoderFactory decoderFactory;
    encoderFactory = new DefaultVideoEncoderFactory(
    rootEglBase.getEglBaseContext(), true /* enableIntelVp8Encoder */, false);
    decoderFactory = new DefaultVideoDecoderFactory(rootEglBase.getEglBaseContext());









    share|improve this question



























      0












      0








      0








      Everything else in my app seems fine, both remote and local streams display just fine if I'm using Camera1 API. But, when I try and use the Camera2 API, the local video stream doesn't show anymore, a black screen shows instead. The local stream is still being displayed on the remote end though, and there's no error messages in the log either. The API is the only thing I changed in my code. Anyone knows what's going on here?



      I came across a similar problem here, but it's outdated and not testable as setVideoHwAccelerationOptions() has been depreciated and the related stuff is being handled by coded factories as described here.



      Here's my code for building these factories, in case that's helpful:



      final VideoEncoderFactory encoderFactory;
      final VideoDecoderFactory decoderFactory;
      encoderFactory = new DefaultVideoEncoderFactory(
      rootEglBase.getEglBaseContext(), true /* enableIntelVp8Encoder */, false);
      decoderFactory = new DefaultVideoDecoderFactory(rootEglBase.getEglBaseContext());









      share|improve this question
















      Everything else in my app seems fine, both remote and local streams display just fine if I'm using Camera1 API. But, when I try and use the Camera2 API, the local video stream doesn't show anymore, a black screen shows instead. The local stream is still being displayed on the remote end though, and there's no error messages in the log either. The API is the only thing I changed in my code. Anyone knows what's going on here?



      I came across a similar problem here, but it's outdated and not testable as setVideoHwAccelerationOptions() has been depreciated and the related stuff is being handled by coded factories as described here.



      Here's my code for building these factories, in case that's helpful:



      final VideoEncoderFactory encoderFactory;
      final VideoDecoderFactory decoderFactory;
      encoderFactory = new DefaultVideoEncoderFactory(
      rootEglBase.getEglBaseContext(), true /* enableIntelVp8Encoder */, false);
      decoderFactory = new DefaultVideoDecoderFactory(rootEglBase.getEglBaseContext());






      android android-camera webrtc android-camera2






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 20 at 10:03









      Fantômas

      32.6k156389




      32.6k156389










      asked Jan 20 at 9:48









      jackz314jackz314

      15818




      15818
























          1 Answer
          1






          active

          oldest

          votes


















          0














          Problem solved! Turns out all of the camera and rendering related stuff has to share a same EglBase instance and its context. I created multiple instances while initializing the connection.



          As for the reason why local video stream doesn't show only when using Camera2 API, I suppose is because Camera2Enumerator is the one that requires a context, likely EglBaseContext, whereas Camera1 doesn't require it. (I'm not sure about this one, correct me if I'm wrong.)



          Anyways, TL;DR: check the code and make sure you are using a single EglBase instance for all your related operations.






          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%2f54275237%2flocal-video-stream-not-showing-when-using-camera2-api%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














            Problem solved! Turns out all of the camera and rendering related stuff has to share a same EglBase instance and its context. I created multiple instances while initializing the connection.



            As for the reason why local video stream doesn't show only when using Camera2 API, I suppose is because Camera2Enumerator is the one that requires a context, likely EglBaseContext, whereas Camera1 doesn't require it. (I'm not sure about this one, correct me if I'm wrong.)



            Anyways, TL;DR: check the code and make sure you are using a single EglBase instance for all your related operations.






            share|improve this answer




























              0














              Problem solved! Turns out all of the camera and rendering related stuff has to share a same EglBase instance and its context. I created multiple instances while initializing the connection.



              As for the reason why local video stream doesn't show only when using Camera2 API, I suppose is because Camera2Enumerator is the one that requires a context, likely EglBaseContext, whereas Camera1 doesn't require it. (I'm not sure about this one, correct me if I'm wrong.)



              Anyways, TL;DR: check the code and make sure you are using a single EglBase instance for all your related operations.






              share|improve this answer


























                0












                0








                0







                Problem solved! Turns out all of the camera and rendering related stuff has to share a same EglBase instance and its context. I created multiple instances while initializing the connection.



                As for the reason why local video stream doesn't show only when using Camera2 API, I suppose is because Camera2Enumerator is the one that requires a context, likely EglBaseContext, whereas Camera1 doesn't require it. (I'm not sure about this one, correct me if I'm wrong.)



                Anyways, TL;DR: check the code and make sure you are using a single EglBase instance for all your related operations.






                share|improve this answer













                Problem solved! Turns out all of the camera and rendering related stuff has to share a same EglBase instance and its context. I created multiple instances while initializing the connection.



                As for the reason why local video stream doesn't show only when using Camera2 API, I suppose is because Camera2Enumerator is the one that requires a context, likely EglBaseContext, whereas Camera1 doesn't require it. (I'm not sure about this one, correct me if I'm wrong.)



                Anyways, TL;DR: check the code and make sure you are using a single EglBase instance for all your related operations.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Jan 21 at 6:43









                jackz314jackz314

                15818




                15818
































                    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%2f54275237%2flocal-video-stream-not-showing-when-using-camera2-api%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

                    Liquibase includeAll doesn't find base path

                    How to use setInterval in EJS file?

                    Petrus Granier-Deferre