Webカメラの動画を保存して再生するアプリを作る
次に、ソリューションエクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト2のコードを記述します。
ロジックコードを記述する
リスト2 (MainWindow.xaml.vb)
Option Strict On
写真、オーディオ録音、ビデオなどのメディアを作成したり、連携させたりするためのクラスの含まれる、Windows.Media.Capture名前空間をインポートします。
Imports Windows.Media.Capture
ファイル、フォルダおよびアプリケーションの設定を管理するクラスの含まれる、Windows.Storage名前空間をインポートします。
Imports Windows.Storage
ファイルの閲覧、開くファイルの選択、名前、拡張子、ファイル格納場所の選択等の機能を提供するクラスの含まれる、Windows.Storage.Pickers名前空間をインポートします。
Imports Windows.Storage.Pickers Public NotInheritable Class MainPage Inherits Page
ページがアクティブになった時の処理
動画を表示して保存するVideoSaveShowプロシージャを実行します。
Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs) VideoSaveShow() End Sub
動画を表示して保存する処理
ビデオライブラリにアクセスします。CreateFolderAsyncメソッドでビデオライブラリ内にVideoSampleというサブフォルダを作成します。CreationCollisionOption.OpenIfExistsと指定すると、同名フォルダがある場合は、そのフォルダ名を返し、ない場合は新規に作成します。
接続されたカメラから単一のフォトかビデオをキャプチャするクラスである、CameraCaptureUIクラスの新しいインスタンスmyCameraオブジェクトを作成します。
キャプチャされたビデオを格納する形式を指定する、VideoSettings.FormatプロパティにMp4形式を指定します。
ビデオトリミングのユーザーインターフェースが有効になるかどうかを決定する、VideoSettings.AllowTrimmingプロパティにFalseを指定します。
ユーザーが選択できる最高解像度を指定する、VideoSettings.MaxResolutionプロパティにCameraCaptureUIMaxVideoResolution.StandardDefinition(標準解像度)を指定します。
CaptureFileAsyncメソッドで、写真またはビデオをキャプチャするダイアログを表示するための操作オブジェクトを作成します。CameraCaptureUIMode.Videoと指定して、ビデオのキャプチャだけを可能にします。
ファイルの名前、拡張子、および格納場所をユーザーが選択できるファイルピッカーを表す、FileSavePickerクラスの新しいインスタンス、myPickerオブジェクトを作成します。
SuggestedStartLocationプロパティにファイルの格納場所として、ビデオライブラリを指定します。
FileTypeChoices.Addで、ファイルの種類のコレクションをmp4として追加します。ファイル保存ピッカーがユーザーに提示するファイル名を指定する、SuggestedFileNameプロパティに、現在の年月日時分秒を指定します。
変数mySaveFileで、PickSaveFileAsyncメソッドを使って、ユーザーがファイルを保存したり、ファイル名、拡張子、およびファイルの保存場所を指定したりできるようにファイルピッカーを表示します。
MoveAndReplaceAsyncメソッドで、現在のファイル(mySaveFile)を指定されたファイルの場所に移動し、その場所の指定されたファイルを置き換えます。
Private Async Sub VideoSaveShow() Dim myStorageFolder As StorageFolder = Windows.Storage.KnownFolders.VideosLibrary Dim mySubFolder = Await myStorageFolder.CreateFolderAsync("VideoSample", CreationCollisionOption.OpenIfExists) Dim myCamera As New CameraCaptureUI myCamera.VideoSettings.Format = CameraCaptureUIVideoFormat.Mp4 myCamera.VideoSettings.AllowTrimming = False myCamera.VideoSettings.MaxResolution = CameraCaptureUIMaxVideoResolution.StandardDefinition Dim myFile As StorageFile = Await myCamera.CaptureFileAsync(CameraCaptureUIMode.Video) If myFile Is Nothing = False Then Dim myPicker As New FileSavePicker myPicker.SuggestedStartLocation = PickerLocationId.VideosLibrary myPicker.FileTypeChoices.Add("mp4", New List(Of String)() From {".mp4"}) myPicker.SuggestedFileName = DateTime.Now.ToString("yyyy年MM月dd日HH時mm分ss秒") Dim mySaveFile As StorageFile = Await myPicker.PickSaveFileAsync If mySaveFile Is Nothing = False Then Await myFile.MoveAndReplaceAsync(mySaveFile) End If End If End Sub
[Play]アイコンがタップされた時の処理
ユーザーがファイルを開いて選択できるようにするUI要素を表す、新しいFileOpenPickerクラスのインスタンスOpenPickerオブジェクトを作成します。
ファイルを検索する際の初期位置を設定する、SuggestedStartLocationプロパティにビデオライブラリを指定します。
FileTypeFilter.Addメソッドで、ファイルオープンピッカーが表示するファイルの種類を追加します。この場合は.mp4を指定しています。
PickSingleFileAsyncメソッドで、ユーザーが1つのファイルを選択できるようにファイルピッカーを表示し、変数myFileで参照します。
OpenFileAsyncメソッドで、指定したファイルを読み込み専用で開き、myStreamで参照します。
MediaElementのSetSourceメソッドで、指定されたストリームを使用してSourceプロパティを設定します。
SetSourceメソッドの書式は下記の通りです。
MediaElement.SetSource(stream As Windows.Storage.Streams.IRandomAccessStream,mimeType As String)
指定されたストリームにmyStreamオブジェクトを指定し、myFile.ContentTypeでコンテンツのMIME型を取得します。Playメソッドで再生を開始します。
Private Async Sub playButton_Click(sender As Object, e As RoutedEventArgs) Handles playButton.Click Try Dim OpenPicker As New FileOpenPicker OpenPicker.SuggestedStartLocation = PickerLocationId.VideosLibrary OpenPicker.FileTypeFilter.Add(".mp4") Dim myFile = Await OpenPicker.PickSingleFileAsync Dim myStream = Await myFile.OpenAsync(FileAccessMode.Read) MediaElement1.SetSource(myStream, myFile.ContentType) MediaElement1.Play() Catch Exit Sub End Try End Sub
戻る(←)アイコンがタップされた時の処理
動画を表示して保存する処理である、VideoSaveShowプロシージャを実行します。
Private Sub backButton_Click(sender As Object, e As RoutedEventArgs) Handles backButton.Click VideoSaveShow() End Sub End Class
今回はここまでです。ありがとうございました。
筆者からのお知らせ
筆者はWindowsストアでアプリを公開しています。チャームの検索からWindowsストアを選択して、検索欄に、kuniyasuまたはYakushijiKuniyasuと入力すると、公開されているアプリの一覧が表示されます。上記はどちらも私のアカウントですので、興味のある方は是非ダウンロードして使ってみてください。
Webカメラの動画を保存して再生するアプリ