酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windowsストアアプリで複数のカメラが付いているタブレットでMediaCaptureを使ったカメラプレビューをする

大昔に「カメラプレビューを開始する」という記事を書きました。この記事はMediaCaptureを使ってカメラプレビューをアプリ内で表示させていました。

本記事では、Windowsストアアプリで複数のカメラが付いているタブレットでMediaCaptureを使ったカメラプレビューをする方法を紹介します。

f:id:ch3cooh393:20181012175804p:plain

タブレットなどに複数カメラが備え付けされている場合にMediaCaptureでカメラプレビューする

デスクトップパソコンやノートパソコンでは、ウェブカメラが付いていたとしても1つだけなので特に前述した記事の通り実施して頂ければ問題ないのですが、タブレットの場合は前後にカメラが複数個設置されています。

さて、前面 or 背面カメラを使ってカメラプレビューを開始する場合、どうしたら良いのでしょうか?

カメラデバイスの一覧を取得して、どのカメラを利用するか選択させる

デバイス一覧を取得しLINQを使って前面についているカメラか背面についているカメラかを選択して、初期化をおこないます。

// キャプチャーの初期化処理用の設定をおこなう
var captureInitSettings = new MediaCaptureInitializationSettings();
captureInitSettings.VideoDeviceId = "";
captureInitSettings.StreamingCaptureMode = StreamingCaptureMode.Video;
captureInitSettings.PhotoCaptureSource = PhotoCaptureSource.Auto;

// デバイスの一覧を取得する
var devices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
if (devices.Count() == 0)
{
    // カメラデバイスがないので、カメラプレビューができない
    return;
}
else if (devices.Count() == 1)
{
    // カメラが1つしかない
    captureInitSettings.VideoDeviceId = devices[0].Id;
}
else
{
    // カメラが沢山ついている場合

    // フロントカメラ(フォアカメラ?前面についているカメラ)を取得する
    var foreCamera = devices.FirstOrDefault(item =>
    {
        return item.EnclosureLocation != null
            && item.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Front;
    });

    // バックカメラの情報を取得する
    var backCamera = devices.FirstOrDefault(x =>
    {
        return x.EnclosureLocation != null
            && x.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back;
    });

    // 好きな方を使えばいいと思う(ここではバックカメラ
    captureInitSettings.VideoDeviceId = backCamera.Id;
}

// MediaCaptureオブジェクトの生成とキャプチャー処理の初期化
capture = new MediaCapture();
await capture.InitializeAsync(captureInitSettings);

// プレビューを開始する
captureElement.Source = capture;
await capture.StartPreviewAsync();