QMediaRecorder Class

QMediaRecorderクラスは、キャプチャ・セッションのエンコードと記録に使用します。詳細...

ヘッダー #include <QMediaRecorder>
CMakeの find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake QT += multimedia
QML で MediaRecorder
継承: QObject

パブリックな型

enum EncodingMode { ConstantQualityEncoding, ConstantBitRateEncoding, AverageBitRateEncoding, TwoPassEncoding }
enum Error { NoError, ResourceError, FormatError, OutOfSpaceError, LocationNotWritable }
enum Quality { VeryLowQuality, LowQuality, NormalQuality, HighQuality, VeryHighQuality }
enum RecorderState { StoppedState, RecordingState, PausedState }

プロパティ

パブリック機能

QMediaRecorder(QObject *parent = nullptr)
virtual ~QMediaRecorder() override
QUrl actualLocation() const
void addMetaData(const QMediaMetaData &metaData)
int audioBitRate() const
int audioChannelCount() const
int audioSampleRate() const
bool autoStop() const
QMediaCaptureSession *captureSession() const
qint64 duration() const
QMediaRecorder::EncodingMode encodingMode() const
QMediaRecorder::Error error() const
QString errorString() const
bool isAvailable() const
QMediaFormat mediaFormat() const
QMediaMetaData metaData() const
QIODevice *outputDevice() const
QUrl outputLocation() const
QMediaRecorder::Quality quality() const
QMediaRecorder::RecorderState recorderState() const
void setAudioBitRate(int bitRate)
void setAudioChannelCount(int channels)
void setAudioSampleRate(int sampleRate)
void setAutoStop(bool autoStop)
void setEncodingMode(QMediaRecorder::EncodingMode mode)
void setMediaFormat(const QMediaFormat &format)
void setMetaData(const QMediaMetaData &metaData)
void setOutputDevice(QIODevice *device)
void setOutputLocation(const QUrl &location)
void setQuality(QMediaRecorder::Quality quality)
void setVideoBitRate(int bitRate)
void setVideoFrameRate(qreal frameRate)
void setVideoResolution(const QSize &size)
void setVideoResolution(int width, int height)
int videoBitRate() const
qreal videoFrameRate() const
QSize videoResolution() const

パブリックスロット

void pause()
void record()
void stop()

シグナル

void actualLocationChanged(const QUrl &location)
void audioBitRateChanged()
void audioChannelCountChanged()
void audioSampleRateChanged()
void autoStopChanged()
void durationChanged(qint64 duration)
void encoderSettingsChanged()
void encodingModeChanged()
void errorChanged()
void errorOccurred(QMediaRecorder::Error error, const QString &errorString)
void mediaFormatChanged()
void metaDataChanged()
void qualityChanged()
void recorderStateChanged(QMediaRecorder::RecorderState state)
void videoBitRateChanged()
void videoFrameRateChanged()
void videoResolutionChanged()

詳細説明

QMediaRecorder クラスを使用して、QMediaCaptureSession で生成されたメディアをエンコードおよび記録します:

メディアを記録するには、ジェネレーターを対応するメディア・キャプチャ・セッ ションに接続します。

ビデオエンコーディングと録画の性能は、ハードウェア、オペレーティングシス テム、インストールされているグラフィックドライバ、および入力ビデオフォーマット によって制限されます。QCameraQScreenCapture 、またはQWindowCapture が、QMediaRecorder がエンコードして記録できるよりも速くビデオフレームを生成する場合、レコーダーはいくつかのフレームをドロップすることがあります。この現象は、入力フレームの解像度が 4K などと高く、ハードウェアによる高速エンコードが利用できない場合に発生する可能性があります。入力ビデオをQVideoFrameInput で生成する場合、QVideoFrameInput::sendVideoFrame メソッドは何もせず、この制限に達して内部フレームキューがいっぱいになるたびにfalse を返します。レコーダーが再び新しいフレームを受信する準備ができたことを知るには、信号QVideoFrameInput::readyToSendVideoFrame を頼りにしてください。ビデオ・フレームの生成レートを変更できず、フレームをドロップすることが望ましくない場合は、ハードウェアのメモリ制限を考慮して、QVideoFrameInput の上に独自のフレーム・キューを実装することを推奨します。

QMediaCaptureSession session;
QAudioInput audioInput;
session.setAudioInput(&input);
QMediaRecorder recorder;
session.setRecorder(&recorder);
recorder.setQuality(QMediaRecorder::HighQuality);
recorder.setOutputLocation(QUrl::fromLocalFile("test.mp3"));
recorder.record();

メンバー型ドキュメント

enum QMediaRecorder::EncodingMode

エンコーディングモードを列挙する。

定数説明
QMediaRecorder::ConstantQualityEncoding0エンコーディングは一定の品質を目指し、フィットするようにビットレートを調整する。
QMediaRecorder::ConstantBitRateEncoding1エンコーディングは一定のビットレートを使用し、フィットするように品質を調整する。
QMediaRecorder::AverageBitRateEncoding2エンコーディングは平均的なビットレート設定を維持しようとしますが、必要に応じてビットレートを増減します。
QMediaRecorder::TwoPassEncoding3メディアはまず処理されて特性が決定され、次に2回目の処理が行われ、必要な部分に多くのビットが割り当てられる。

enum QMediaRecorder::Error

定数説明
QMediaRecorder::NoError0エラーなし。
QMediaRecorder::ResourceError1デバイスの準備ができていないか、使用できません。
QMediaRecorder::FormatError2現在のフォーマットはサポートされていません。
QMediaRecorder::OutOfSpaceError3デバイスに空き容量がありません。
QMediaRecorder::LocationNotWritable4出力先が書き込み可能でない。

enum QMediaRecorder::Quality

品質エンコードレベルを列挙する。

定数
QMediaRecorder::VeryLowQuality0
QMediaRecorder::LowQuality1
QMediaRecorder::NormalQuality2
QMediaRecorder::HighQuality3
QMediaRecorder::VeryHighQuality4

enum QMediaRecorder::RecorderState

定数説明
QMediaRecorder::StoppedState0レコーダーはアクティブではありません。
QMediaRecorder::RecordingState1録画が要求されています。
QMediaRecorder::PausedState2レコーダーは一時停止中です。

プロパティの説明

[read-only] actualLocation : const QUrl

このプロパティは、最後のメディアコンテンツの実際の位置を保持する。

新しいoutputLocation 、または NULLでないoutputDevice が割り当てられると、実際の場所はリセットされる。record() が呼び出され、outputDevicenull であるか、書き込み可能でない場合、レコーダは以下の規則に基づいて実際の場所を生成する。

  • outputLocation が空、ディレクトリ、または拡張子のないファイルの場合、レコーダーは、 選択されたメディア形式とシステムMIMEタイプに基づいて、適切な拡張子を生成する。
  • outputLocation がディレクトリの場合、レコーダーはその中に新しいファイル名を生成する。
  • outputLocation が空の場合、レコーダーはオーディオまたはビデオ用のシステム固有ディレクトリに新しいファイル名を生成します。
  • レコーダーは、recorderStateChanged(RecordingState) を発する前に、実際の場所を生成する。

アクセス関数:

QUrl actualLocation() const

通知信号:

void actualLocationChanged(const QUrl &location)

autoStop : bool

このプロパティは、すべてのメディア入力がストリームの終了を報告したとき、または非アクティブになったときに、メディアレコーダが自動的に停止するかどうかを制御します。

ストリームの終了は、空のメディアフレームを送信することで報告されます。このフレームは、QVideoFrameInput またはQAudioBufferInput で明示的に送信できます。

ビデオ入力、特にQCameraQScreenCaptureQWindowCapture は、関数setActive で非アクティブにできます。

デフォルトはfalse

QMediaRecorder::autoStopは、FFmpegバックエンドでのみサポートされています。

アクセス関数

bool autoStop() const
void setAutoStop(bool autoStop)

Notifier シグナル:

void autoStopChanged()

QCamera,QScreenCapture,QWindowCaptureも参照

[read-only] duration : const qint64

このプロパティは、記録されたメディアの継続時間をミリ秒単位で保持する。

アクセス関数:

qint64 duration() const

ノーティファイアシグナル:

void durationChanged(qint64 duration)

[read-only] error : const QMediaRecorder::Error

現在のエラー状態を返します。

アクセス関数

QMediaRecorder::Error error() const

通知シグナル:

void errorChanged()

errorString()も参照のこと

[read-only] errorString : const QString

現在のエラー状態を表す文字列を返します。

アクセス関数

QString errorString() const

通知シグナル:

void errorChanged()

error()も参照のこと

mediaFormat : QMediaFormat

このプロパティは、レコーダーの現在のQMediaFormat を保持する。

このプロパティの値は、record ()を呼び出したときに変更されることがあります。この場合、mediaFormatChangedシグナルが発行される。これは、QMediaFormat::audioCodec またはQMediaFormat::fileFormat プロパティが未指定に設定されている場合、常に発生する。ビデオ・ソース(QCameraQScreenCapture 、またはQVideoFrameInput )がQMediaCaptureSession に接続されている場合は、QMediaFormat::videoCodec も指定する必要がある。メディアバックエンドが選択されたファイルフォーマットまたはコーデックをサポートしていない場合、QMediaFormat::audioCodec およびQMediaFormat::videoCodec プロパティ値も変更される可能性があります。

ビデオ・フォーマットが要求されたが、QMediaCaptureSession にビデオ・ソースが接続されていない場合、QMediaFormat::fileFormat プロパティ値は、audio のみのフォーマットに変更されることもある。たとえば、QMediaFormat::fileFormat が QMediaFormat::FileFormat::MPEG4 に設定されている場合、QMediaFormat::FileFormat::Mpeg4Audio に変更されることがあります。

アプリケーションは、QMediaFormat::isSupported ()関数を呼び出すことで、録画開始前にmediaFormatが変更されるかどうかを判断できます。ビデオ入力なしで録画する場合、record() は、以下が真であれば、QMediaFormat に変更されません:

ビデオ入力ありで録画する場合、mediaFormat は、以下が真であれば変更されない:

注: QMediaRecorder は、QMediaFormat::fileFormat を決定する際にoutputLocation プロパティからのファイル名拡張子を考慮しません。また、拡張子が指定されている場合、選択されたファイル形式に合わせてoutputLocation QUrl の拡張子を調整することはありません。したがって、アプリケーションは、QMediaRecorder::mediaFormat::fileFormatをファイル拡張子と一致するように設定するか、ファイル拡張子を指定しないようにする必要があります。ファイル拡張子が指定されていない場合、actualLocation ファイル拡張子は、録音に使用されたファイル形式に合わせて更新されます。

アクセス関数:

QMediaFormat mediaFormat() const
void setMediaFormat(const QMediaFormat &format)

通知シグナル:

void mediaFormatChanged()

QMediaFormat::isSupported() およびQMediaRecorder::actualLocationも参照のこと

metaData : QMediaMetaData

録画に関連するメタデータを返します。

アクセス関数

QMediaMetaData metaData() const
void setMetaData(const QMediaMetaData &metaData)

通知シグナル

outputLocation : QUrl

このプロパティは、メディアコンテンツの保存場所を保持する。

例えば、サービスがローカルのファイルシステムのロケーションのみをサポートし、ネットワークURLが渡された場合など、ロケーションの設定は失敗する可能性がある。操作に失敗すると、errorOccured() シグナルが発行される。

レコーダーに書き込み可能なoutputDevice が割り当てられている場合、出力場所は無視される。この動作は将来変更される可能性があるため、outputLocation またはoutputDevice のどちらか1つの出力のみを設定することを推奨する。

出力場所には、空、ディレクトリ、またはファイルを指定できます。ディレクトリまたはファイルへのパスは、相対パスでも絶対パスでもかまいません。record() メソッドは、指定された出力場所とシステム固有の設定に従って実際の場所を生成します。詳細については、actualLocation プロパティの説明を参照してください。

アクセス関数:

QUrl outputLocation() const
void setOutputLocation(const QUrl &location)

actualLocation およびoutputDevice()も参照してください

quality : Quality

録画品質を返します。

アクセス機能

QMediaRecorder::Quality quality() const
void setQuality(QMediaRecorder::Quality quality)

通知信号

[read-only] recorderState : const QMediaRecorder::RecorderState

このプロパティは、メディアレコーダの現在の状態を保持する。

stateプロパティは、ユーザー要求を表し、record ()、pause ()またはstop ()呼び出し中に同期的に変更される。レコーダーの状態は、録画が失敗したときに非同期に変更されることもある。

アクセス関数:

QMediaRecorder::RecorderState recorderState() const

Notifier シグナル:

void recorderStateChanged(QMediaRecorder::RecorderState state)

メンバ関数ドキュメント

QMediaRecorder::QMediaRecorder(QObject *parent = nullptr)

メディア レコーダーを構築する。メディア レコーダーはparent の子です。

[override virtual noexcept] QMediaRecorder::~QMediaRecorder()

メディアレコーダーオブジェクトを破棄する。

[signal] void QMediaRecorder::actualLocationChanged(const QUrl &location)

記録メディアの実際のlocation が変化したことを示す信号。このシグナルは通常、記録開始時に発せられる。

注: プロパティactualLocation に対するノーティファイア・シグナル。

void QMediaRecorder::addMetaData(const QMediaMetaData &metaData)

記録メディアにmetaData

int QMediaRecorder::audioBitRate() const

圧縮オーディオストリームのビットレートをビット毎秒で返す。

注: プロパティ audioBitRate のゲッター関数。

setAudioBitRate()も参照してください

[signal] void QMediaRecorder::audioBitRateChanged()

録画音声のビットレートが変更されたときの信号。

注: audioBitRate プロパティの通知信号。

int QMediaRecorder::audioChannelCount() const

オーディオチャンネル数を返す。

注: プロパティ audioChannelCount のゲッター関数。

setAudioChannelCount()も参照してください

[signal] void QMediaRecorder::audioChannelCountChanged()

録音オーディオチャンネル数が変更されたときに通知する。

注: プロパティの通知信号audioChannelCount

int QMediaRecorder::audioSampleRate() const

オーディオサンプルレートを Hz 単位で返します。

注: プロパティ audioSampleRate のゲッター関数。

setAudioSampleRate()も参照してください

[signal] void QMediaRecorder::audioSampleRateChanged()

レコーディングオーディオサンプルレートが変更されたときのシグナル。

注: audioSampleRate プロパティの通知信号。

QMediaCaptureSession *QMediaRecorder::captureSession() const

メディアキャプチャセッションを返します。

[signal] void QMediaRecorder::durationChanged(qint64 duration)

記録メディアのduration が変更されたことを示す。

注: duration プロパティのノーティファイア信号。

[signal] void QMediaRecorder::encoderSettingsChanged()

エンコーダの設定が変更されたことを知らせる。

QMediaRecorder::EncodingMode QMediaRecorder::encodingMode() const

エンコーディングモードを返す。

注: プロパティ encodingMode のゲッター関数です。

setEncodingMode() およびEncodingModeも参照してください

[signal] void QMediaRecorder::encodingModeChanged()

エンコーディングモードが変更されたときに通知する。

注: プロパティの通知シグナルencodingMode

[signal] void QMediaRecorder::errorOccurred(QMediaRecorder::Error error, const QString &errorString)

error 、エラーの説明を含むerrorString

bool QMediaRecorder::isAvailable() const

メディア・レコーダー・サービスが使用可能であれば、true を返す。

[signal] void QMediaRecorder::metaDataChanged()

メディアオブジェクトのメタデータが変更されたことを知らせる。

複数のメタデータ要素が変更された場合、 metaDataChanged()は一度だけ発行される。

注: プロパティmetaData に対するノーティファイアシグナル。

QIODevice *QMediaRecorder::outputDevice() const

メディアコンテンツの出力IOデバイスを返す。

setOutputDevice()も参照

[slot] void QMediaRecorder::pause()

録音を一時停止します。

レコーダーの状態はQMediaRecorder::PausedState に変更されます。

プラットフォームによっては、録画の一時停止に対応していない場合があります。この場合、レコーダーの状態は変更されません。

[signal] void QMediaRecorder::qualityChanged()

録画画質が変化したときに通知する。

注: プロパティの通知信号quality

[slot] void QMediaRecorder::record()

録画を開始する。

レコーダーの状態はすぐに c{QMediaRecorder::RecordingState} に変更されるが、録画は非同期で開始される。

録画に失敗すると、error() シグナルが発せられ、レコーダーの状態はQMediaRecorder::StoppedState にリセットされる。

このメソッドは、生成規則に従ってactualLocation を更新する。

注: モバイル・デバイスでは、録音は、recordを呼び出したときのデバイスの向きで行われ、録音中はロックされます。ユーザーインターフェースのアーティファクトを避けるため、QWindow の contentOrientation プロパティを使用して、録画が進行している間はユーザーインターフェースを同じ向きにロックしておき、録画が終了したら再びロックを解除することをお勧めします。

QMediaRecorder::RecorderState QMediaRecorder::recorderState() const

現在のメディアレコーダーの状態を返す。

注: プロパティrecorderStateのゲッター関数。

QMediaRecorder::RecorderStateも参照

[signal] void QMediaRecorder::recorderStateChanged(QMediaRecorder::RecorderState state)

メディアレコーダのstate が変更されたことを通知する。

注: プロパティrecorderState に対するノーティファイアシグナル。

void QMediaRecorder::setAudioBitRate(int bitRate)

オーディオbitRate をビット毎秒で設定する。

注: プロパティaudioBitRate のセッター関数。

audioBitRate()も参照

void QMediaRecorder::setAudioChannelCount(int channels)

オーディオchannels の数を設定します。

値 -1 は、レコーダーがオーディオソースから利用可能なものとコーデックの制限に基づいて最適な選択を行う必要があることを示します。

備考: プロパティaudioChannelCount のセッター関数。

audioChannelCount()も参照

void QMediaRecorder::setAudioSampleRate(int sampleRate)

オーディオのsampleRate を Hz 単位で設定します。

値が-1 の場合、レコーダーはオーディオソースから利用可能なものとコーデックの制限に基づいて最適な選択を行う必要があることを示します。

注: プロパティaudioSampleRate のセッター関数です。

audioSampleRate()も参照

void QMediaRecorder::setEncodingMode(QMediaRecorder::EncodingMode mode)

エンコーディングmode の設定をする。

ConstantQualityEncoding が設定されている場合、品質エンコーディングパラメータが使用され、ビットレートは無視されます。

注: プロパティencodingMode に対するセッター関数。

encodingMode() およびEncodingModeも参照

void QMediaRecorder::setMetaData(const QMediaMetaData &metaData)

メタデータをmetaData に設定する。

注意: メタデータを正しく設定するには、録画を開始する前に設定する必要があります。録画が開始されると、設定されたメタデータは次の録画に添付されます。

注: プロパティmetaData に対するセッター関数。

metaData()も参照のこと

void QMediaRecorder::setOutputDevice(QIODevice *device)

メディアコンテンツの出力IOデバイスを設定する。

device は、録画開始前にWriteOnly またはReadWrite モードでオープンされていなければならない。

メディアレコーダは、指定されたdevice の所有権を取らない。録画が開始された場合、シグナルrecorderStateChanged(StoppedState) が発せられるまで、デバイスをアライブしてオープンしておく必要がある。

このメソッドは、指定されたdevicenull でない限り、actualLocation を即座にリセットする。

書き込み可能な出力デバイスがレコーダーに割り当てられている場合、outputLocation は無視され、録画開始時にactualLocation は生成されない。この動作は将来変更される可能性があるため、outputLocation またはoutputDevice のどちらか1つの出力のみを設定することを推奨する。

QMediaRecorder::setOutputDevice はFFmpegバックエンドでのみサポートされています。

outputDevice() およびoutputLocationも参照のこと

void QMediaRecorder::setVideoBitRate(int bitRate)

ビデオbitRate をビット毎秒で設定する。

注: プロパティvideoBitRate のセッター関数。

videoBitRate()も参照

void QMediaRecorder::setVideoFrameRate(qreal frameRate)

ビデオframeRate を設定する。

値が 0 の場合、レコーダーは、ビデオソースから利用可能なものとコーデックの制限に基づいて、最適な選択を行う必要があることを示します。

注: プロパティvideoFrameRate のセッター関数。

videoFrameRate()も参照

void QMediaRecorder::setVideoResolution(const QSize &size)

エンコードされたビデオの解像度をsize に設定する。

空のQSize を渡すと、レコーダーは、ビデオソースから利用可能なものとコーデックの制限に基づいて、最適な解像度を選択します。

注: プロパティvideoResolution のセッター関数。

videoResolution()も参照

void QMediaRecorder::setVideoResolution(int width, int height)

エンコードされたビデオの解像度のwidthheight を設定する。

これはオーバーロードされた関数です。

注: プロパティvideoResolution のセッター関数です。

[slot] void QMediaRecorder::stop()

レコーダーは録画を停止します。しかし、保留中のビデオおよびオーディオデータの処理には、まだ時間がかかる場合があります。メディアレコーダーの状態がQMediaRecorder::StoppedState に変わると、録画は終了します。

int QMediaRecorder::videoBitRate() const

圧縮ビデオストリームのビットレートをビット毎秒で返す。

注: プロパティ videoBitRate のゲッター関数。

setVideoBitRate()も参照

[signal] void QMediaRecorder::videoBitRateChanged()

録画映像のビットレートが変更された場合に通知する。

注: videoBitRate プロパティの通知信号。

qreal QMediaRecorder::videoFrameRate() const

ビデオフレームレートを返す。

注: videoFrameRate プロパティのゲッター関数。

setVideoFrameRate()も参照

[signal] void QMediaRecorder::videoFrameRateChanged()

録画映像のフレームレートが変化したときに通知する。

注: videoFrameRate プロパティの通知信号。

QSize QMediaRecorder::videoResolution() const

エンコードされた動画の解像度を返す。

注: プロパティ videoResolution のゲッター関数。

setVideoResolution()も参照

[signal] void QMediaRecorder::videoResolutionChanged()

録画解像度が変更された場合に通知する。

注: プロパティvideoResolution の通知信号。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.