Как повернуть мобильную камеру с помощью javascript?

#javascript #camera #rotation #blazor #blazor-jsinterop

Вопрос:

Я создал простое приложение для сканирования Qr-кодов и штрих-кодов с помощью Blazor. когда я открываю его на мобильном телефоне, в настоящее время я могу получить доступ только к фронтальной камере. но мне нужно повернуть камеру и получить доступ к камере заднего вида. Я использовал библиотеку Zxing js для сканирования QR-кодов и штрих-кодов и получил доступ к этому файлу js с помощью js-взаимодействия. на следующем рисунке показано мое приложение, как оно выглядит на самом деле.

введите описание изображения здесь

при нажатии кнопки поворота камеры моя передняя камера должна быть повернута, и я должен иметь доступ к задней камере, и если снова нажать кнопку поворота, я должен снова получить доступ к передней камере. это то же самое, что и вращение мобильной камеры.

мой файл QrDialog.razor

 <MudDialog Class="qr-dialog">
<DialogContent>
<input type="hidden" class="form-control mb-2"  @bind-value="outputText"/>

<QrScanner ScanResult="((e) => { outputText=e; })" CodeKey="CodeKey" DialogClose="(()=>{MudDialog.Close(DialogResult.Ok(true));})"/> @*Qr Scaning Component*@



<div class="footer-btn-scan">
 
     <MudIconButton Icon="@Icons.Material.Filled.HighlightOff" Size="Size.Medium"   id="resetButton"></MudIconButton>@* reset button*@
    
     <MudIconButton Icon="@Icons.Material.Filled.Cameraswitch" Size="Size.Medium" id="rotateButton"></MudIconButton>@*camera rotate button*@
 
</div>
     <MudFab ButtonType="ButtonType.Submit"  Icon="@Icons.Material.Filled.QrCodeScanner" Class="scan-btn" id="startButton"/> @*scan button*@

</DialogContent>
 

QrScanner component

 <div class="qr-scanner">

    <div class="box">
        <img src="/img/qr.png"  id="qr-img"/>
        <video id="video" class="d-none"></video>
        <div class="line"></div>
        <div class="angle"></div>
  
    </div>
    
    
</div>
@code{
        protected override async Task OnAfterRenderAsync(bool firstRender)
        {
            if (!firstRender) return;
            await _jsRuntime.InvokeAsync<string>("zxing.start", true, DotNetObjectReference.Create(this));
        }
}
 

I have already included rotate function in the barcode.js file. but is not working.

     (function () { 
    window.zxing = {
        start:function (autostop, wrapper) {

        // some code..

   document.getElementById('rotateButton').addEventListener('click', () => {
     
                        var v = document.getElementById('video');

                        navigator.mediaDevices.getUserMedia({

                            video: {

                                facingMode: {
                                    exact: 'environment'
                                }

                            }
                        }).then(stream => {

                            console.log("camera rotated");

                        }).catch((err) => {
                            console.log(err);
                        });


                    })

      }
    };
    
    })();
 

все остальные функции работают должным образом, хотя мое узкое место находится в этой функции поворота в приведенном выше файле js. если кто-нибудь, пожалуйста, заменит функцию поворота в соответствии с моим требованием, это исправит мою проблему. вся ваша помощь высоко ценится.