Webカメラの動画を保存し、再生するためのアプリケーションサンプル
次に、ソリューションエクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト2のコードを記述します。
ロジックコードを記述する
リスト2 (MainWindow.xaml.vb)
Option Strict On
写真、オーディオの録音とビデオのキャプチャを提供するクラスの含まれるWindows.Media.Captur名前空間をインポートします。
Imports Windows.Media.Capture
ファイル、フォルダ、およびアプリケーションの設定を管理するクラスの含まれる、Windows.Storage名前空間をインポートします。
Imports Windows.Storage
ユーザーがファイルを参照し、ファイルを開き、ファイルを保存する時、名前や拡張子、場所、を選択可能にするUI要素を管理するクラスの含まれる、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というサブフォルダを作成します。CreateFolderAsyncにCreationCollisionOption.OpenIfExistsを指定すると、同名フォルダがある場合はそのフォルダを返し、ない場合は新規に作成してくれます。
接続されたカメラから単一のフォトかビデオをキャプチャするクラスである、新しいCameraCaptureUIのインスタンスmyCameraオブジェクトを作成します。
VideoSettings.Formatプロパティにキャプチャされたビデオを格納するための形式を設定します。
CameraCaptureUIVideoFormat.Mp4と指定して、保存するための形式をmp4形式とします。
CaptureFileAsyncメソッドで、ビデオをキャプチャするダイアログを表示するための操作オブジェクトを作成し、変数myFileで参照します。CameraCaptureUIMode.Videoと指定していますので、ユーザーはビデオのキャプチャだけが可能になります。
ビデオのキャプチャが可能であった場合は、ファイルの名前、拡張子、および格納場所をユーザーが選択できるようにするファイルピッカーを表す、新しいFileSavePickerクラスのインスタンスmyPickerオブジェクトを作成します。
SuggestedStartLocationプロパティに、ファイルの保存場所としてビデオライブラリを指定します。ただし実際に保存する場合は、ビデオライブラリのサブフォルダである、先に作ったVideoSampleサブフォルダを選択して、そこに保存します。ビデオライブラリに直接保存しても何ら問題はありません。
FileTypeChoices.Addメソッドで、ファイルに割り当てるようにユーザーが選択できる、有効なファイルのコレクションを追加します。ここではmp4で拡張子が.mp4のファイルだけを指定しています。
SuggestedFileNameプロパティで、ファイル保存ピッカーがユーザーに提示するファイル名を指定します。ここでは、「現在の年月日時間分秒」のファイル名を指定しています。拡張子は自動的に追加されますので、拡張子は省きます。
PickSaveFileAsyncメソッドで、ユーザーがファイルを保存したり、ファイル名、拡張子、およびファイルの保存場所を設定したりできるようにファイルピッカーを表示し、変数mySaveFileで参照します。
保存するファイルがきちんと指定された場合は、MoveAndReplaceAsyncメソッドで、指定したファイルを、指定されたファイルの場所に移動し、その場所の指定されたファイルを置き換えます。
非同期処理で行われるため、メソッドの先頭にAsyncを追加します。Asyncが追加されていると、その処理が非同期で行われることを意味します。
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 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
[再生]ボタンがクリックされた時の処理
FileOpenPickerクラスの新しいインスタンスOpenPickerオブジェクトを作成します。FileOpenPickerクラスは、ユーザーが選択し、ファイルを開くことのできるUI要素を表すクラスです。
ファイルを開く最初の場所を設定する、SuggestedStartLocationプロパティにビデオライブラリを指定しておきます。ただし、保存された動画ファイルは、ビデオライブラリのサブフォルダであるVideoSampleに保存していると思いますので、VideoSampleフォルダを開いて動画ファイルを指定してください。
開くファイルタイプを指定するFileTypeFilter.Addで「.mp4」を指定して拡張子が.mp4のファイルだけを表示します。
PickSingleFileAsynメソッドで、ユーザーが1つのファイルを選択できるようにファイルピッカーを表示し、変数myFileで参照します。
OpenFileAsyncメソッドで指定したファイルを読み取り専用で開きます。
MediaElementのSetSourceメソッドに、指定されたストリームを使用してSourceプロパティを設定します。
Playメソッドでビデオを再生します。
非同期処理で行われるため、メソッドの先頭にAsyncを追加します。Asyncが追加されていると、その処理が非同期で行われることを意味します。
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
今回はここまでです。ありがとうございました。
Webカメラの動画を保存し、再生するためのアプリサンプル