FireMonkey でのオーディオ/ビデオ
目次
FireMonkey では、メディア ファイル(オーディオおよびビデオ)のキャプチャと再生をサポートしています。
この機能は Windows と macOS のプラットフォームで以下のように使用できます:
- Windows の実装では DirectShow を使用しており、オーディオ/ビデオ機能はあらゆる Windows バージョンで動作します。
- QuickTime は Apple 非推奨であるため、macOS 実装は現在 AVFoundation を使用しています。
サポート対象のファイル形式
以下の形式でメディア ファイルを保存し使用することをお勧めします。
.wav
(Windows の場合).caf
(iOS および Mac の場合).3GP
(Android の場合)
MP3 ファイルなど、他の種類のメディア ファイルを再生することもできます。たとえば、Android のビデオ ファイルは通常 H.263
形式です。
オーディオ/ビデオのキャプチャ
キャプチャ デバイスの基底クラスは TCaptureDevice です。このクラスは、キャプチャ デバイスの基本的なメソッドおよびプロパティをカプセル化したものです。TAudioCaptureDevice および TVideoCaptureDevice では、TCaptureDevice の実装を拡張して、それぞれ、オーディオ キャプチャ デバイス(マイクなど)とビデオ キャプチャ デバイス(Web カメラなど)の具体的な動作を追加しています。
キャプチャ デバイスへのアクセスと管理のために TCaptureDeviceManager が導入されています。 TCaptureDeviceManager には、以下のための具体的なメソッドとプロパティがあります。
- 種類別でのデバイスへのアクセス: GetDevicesByMediaType
- デフォルト デバイスへのアクセス: GetDefaultDeviceByMediaType、DefaultVideoCaptureDevice、DefaultAudioCaptureDevice
- 名前別でのデバイスへのアクセス: GetDevicesByName
- 使用可能なメディア デバイスのリストの取得: Devices
現在使用しているデバイスは、デバイス マネージャの Current プロパティで指定されます。Current は、アプリケーションが TCaptureDeviceManager へのアクセスを要求したときに作成され、アプリケーションが終了するまで保持されます。
コード例
// Delphi declaration
var
VideoCamera : TVideoCaptureDevice;
begin
// Get access to the default video capture device
VideoCamera := TCaptureDeviceManager.Current.DefaultVideoCaptureDevice;
if VideoCamera <> nil then
begin
//do something
end;
end;
// C++ declaration
TCaptureDeviceManager* CaptureManager = TCaptureDeviceManager::Current;
// Get access to the default video capture device
TVideoCaptureDevice* VideoCamera = CaptureManager->DefaultVideoCaptureDevice;
if(VideoCamera){
//do something
}
キャプチャ処理を開始または停止するには、TCaptureDeviceManager を使ってデバイスへのアクセスを取得する必要があります。絶対にキャプチャ デバイスを明示的に破棄しないでください。キャプチャ マネージャだけがそれを行います。
TCaptureDeviceManager では、サードパーティ ベンダで開発されたカスタム キャプチャ デバイスを追加することができます。この新しいデバイスは、RegisterCaptureDeviceClass メソッドを使って元に戻すことができます。新しいデバイスは、登録後、TCaptureDeviceManager であらゆる標準デバイスとしてアクセスすることができます。
メディアの再生
メディア ソースの再生をサポートするために TMedia クラスが導入されました。TMedia では、ファイル名、サイズ、音量、状態、時間などのメディア ファイル プロパティを公開しています。
簡単にアクセスできるよう、非ビジュアル コンポーネント TMediaPlayer が導入されました。Play メソッドを呼び出すと、メディア ファイルの再生を開始でき、Stop メソッドを呼び出すと、再生中のメディア ファイルを停止または一時停止できます。現在の位置は CurrentTime プロパティで指定されます。また、TMediaPlayer では、Duration、VideoSize、Volume、State などのメディア ファイルのプロパティも公開しています。
- TMediaPlayer を使ってオーディオ ファイルを再生するには、FileName プロパティを設定することで再生するファイルの名前を指定し、Play メソッドを呼び出すだけです。ファイル名には、メモリ上で特定できるようにファイルのパスを明示し、拡張子も付ける必要があります。
- ビデオを表示するには、TMediaPlayerControl コントロールを追加し、TMediaPlayerControl の MediaPlayer プロパティを設定することで TMediaPlayer をコントロールにリンクします。TMediaPlayerControl は空のコントロールですが、ビデオをフォームに配置するのに使用されます (メディア ファイルがビデオ ファイルの場合、オーディオ ファイルの再生手順に従うと、ビデオのオーディオ部分が再生されるだけです)。
- コントロールやメニューの項目に関連付けることができるメディア プレーヤー コンポーネントの標準アクションには、Start、Stop、PlayPause、CurrentTime、Volume があります。
Android プラットフォームのビデオ
- Android デバイスで再生されるビデオはフルスクリーン モードで動作します。
- フルスクリーン モードを終了するには、デバイスの戻るボタンを使用します。
- Android のビデオ ファイルは通常 H.263 形式です。
- 詳細については、http://developer.android.com/guide/appendix/media-formats.html を参照してください。
- モバイル サンプル コード AudioRecPlay で示しているように、Android プラットフォームでは、.3GP ファイルは通常オーディ専用です。
- ただし、.3GP 形式でもビデオの再生をサポートできます。ビデオ コーデックを使用するように FMX.Media.Android.pas で切り替える場合は、他のファイル(mp4 など)の場合と同じようにビデオを再生できます。ただし、このように変更すると、AudioRecPlay サンプルの場合のようにオーディオを録音して再生することはできなくなります。
コード例
//Delphi declaration
MediaPlayer1.FileName := 'myVideo.avi';
if MediaPlayer1.Media <> nil then
begin
MediaPlayer1.Play;
end;
// C++ declaration
MediaPlayer1->FileName="myVideo.avi";
if(MediaPlayer1->Media!=null)
{
MediaPlayer1->Play();
}
FireMonkey のオーディオ/ビデオ再生機能では、ネイティブ プラットフォームのメディア ファイル形式をサポートしています。TMediaCodecManager を使用すると、カスタム メディア コーデックを登録してオーディオ/ビデオ機能のサポートを拡張することが可能です。
関連項目
- FMX.Media.TCaptureDeviceManager
- FMX.Media.TCaptureDeviceManager.DefaultAudioCaptureDevice
- FMX.Media.TCaptureDeviceManager.DefaultVideoCaptureDevice
- FMX.Media.TMediaPlayer
- FMX.Media.TMediaPlayerControl
- FMX.Media.TMedia
- オーディオの録音
- アプリケーションへのオーディオ クリップやビデオ クリップの追加
- チュートリアル:FireMonkey のオーディオ/ビデオ機能
- モバイル サンプル コード
サンプル
- FireMonkey オーディオ 録画-再生 サンプル
- メディア プレーヤ サンプル