問題タブ [cmsamplebuffer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
296 参照

ios - マイクからオーディオをキャプチャしているときに、メモリ リークまたはオーディオの過剰なノイズのいずれかで立ち往生しています

マイクからオーディオをキャプチャし、AAC 形式でストリーミング サーバーにストリーミングする必要がある iPhone アプリを作成しています。そのため、最初にオーディオをキャプチャしてから、

オーディオを AAC に変換する方法。

以下はコードです

getAudioBufferDataFromCMSampleBufferRef のコードは次のとおりです。

上記のバージョンのコードでは、BAD_ACCESS エラーが発生します。代わりに、blockBuffer を解放するコードを削除すると、メモリ リークが発生し、メモリ不足のためにアプリが最終的に終了します。

blockBuffer を保持せずに次のコードを記述した場合

以下に示すように異なる

このバージョンでは、ブロックバッファは保持されないため、解放する必要はありません。しかし、オーディオにひどいノイズが入ります。

この問題を解決する方法を知っている人はいますか?

ありがとう、オズグル

0 投票する
3 に答える
2992 参照

ios - AVSampleBufferDisplayLayer がサンプル バッファをレンダリングする速度を設定します

AVSampleBufferDisplayLayer を使用して、h.264 形式でネットワーク接続を介して送信される CMSampleBuffers を表示しています。ビデオの再生はスムーズで正しく機能していますが、フレーム レートを制御できないようです。具体的には、AVSampleBufferDisplayLayer で毎秒 60 フレームをキューに入れると、ビデオが 30 FPS で記録されていても、60 フレームが表示されます。

サンプル バッファーを作成する場合、タイミング情報の配列を CMSampleBufferCreate に渡すことで、プレゼンテーションのタイム スタンプを設定できます (タイミング情報は h.264 ストリームには存在しませんが、コンテナー形式で計算または渡すことができます)。設定したプレゼンテーション タイム スタンプは約 0.033 秒間隔で、持続時間は 0.033 ですが、ディスプレイ レイヤーは 1 秒あたりのフレーム数を可能な限り表示します。

AVSampleBufferDisplayLayer でバッファーをキューに入れる方法は 2 つあります。バッファーの準備ができたら常に -[AVSampleBufferDisplayLayer enqueueSampleBuffer:] を呼び出して「制約」するか、-[AVSampleBufferDisplayLayer requestMediaDataWhenReadyOnQueue:usingBlock:] を呼び出してそのブロックのバッファーをキューに入れることで「制約なし」です。私は両方を試しましたが、2 番目の方法でもできるだけ早くバッファを表示します。バッファーはキューに入れられ、すべてが非常に短い時間で表示されます。

この動作は、kCMSampleAttachmentKey_DisplayImmediately 添付ファイルが CMSampleBuffer に設定されている場合に予想されるものと似ていますが、これは現在設定されていません (デフォルトは false です)。

レイヤーのcontrolTimeBaseを設定してみましたが、効果がないようでした。他に試してみるべきことがなく、オンラインで例を見つけることができませんでした。AVSampleBufferDisplayLayer がフレームを表示するフレームレートを制御する方法を知っている人はいますか?

0 投票する
1 に答える
1473 参照

ios - CMSampleBuffer から Swift のバイト配列へ

マルチピア接続アプリ用のビデオストリームを実装しようとしています。キャプチャされたフレームは VTCompressionSession によって圧縮され、コールバックが呼び出されます。

今、私のCMSamplebufferにはCMBlockBufferが含まれており、この回答で述べたようにNALUなどを抽出できます VideoToolboxを使用してH.264ビデオストリームを解凍する方法ですが、それを行う別の方法を探しています。

CMSampleBuffer のバイト全体を UInt8 配列に書き込むことは可能ですか? CMSampleBuffer の Pointer を取得することはできますが、長さはどのように把握できますか?

英語が下手で申し訳ありませんが、何か問題があればお知らせください。これが私の最初の投稿です。ありがとうございました

0 投票する
3 に答える
1507 参照

ios - Swift で CMSampleBuffer のコピーを作成すると、OSStatus -12743 (無効なメディア形式) が返されます

CMSampleBufferの出力を保存するために のディープ クローンを実行しようとしていAVCaptureSessionます。kCMSampleBufferError_InvalidMediaFormat (OSStatus -12743)関数を実行するとエラーが発生しますCMSampleBufferCreateForImageBufferCVImageBufferCMSampleBuffer形式の説明がどのように一致していないのかわかりません。私がどこで間違ったのか知っている人はいますか?彼女は私のテストコードです。

0 投票する
1 に答える
1082 参照

ios - CVPixelBuffer 内のピクセルを適切に処理する方法は?

簡単な質問は次のとおりです。 のピクセル値に対処する式は何CVPixelBufferですか?

a をフラットなバイト配列に変換しようとしているのですCVPixelBufferが、いくつかの奇妙な点に気付きました:CVPixelBufferは a から取得されますCMSampleBuffer。幅と高さは852x640ピクセルです。合計ピクセルでは、ピクセルあたりのバイトを考慮するとバイト545280が必要になります。21811204

最初の奇妙なことは、同じ行ごとにバイトCVPixelBufferが返されることです。これは、ピクセルに十分なスペースです。これらの追加のピクセルはどこから来るのでしょうか? 最終イメージの 1 行がピクセル幅だけで、実際には の行にピクセルがある場合、どのバイトをコピーする必要があるかをどのように知ることができますか? または、未使用のバイトはどれですか? ところで、それらは未使用ですか?345686412852864CVPixelBuffer

もう 1 つのことは、報告されるデータ サイズCVPixelBuffers(2211848バイト数) です。ここで、34561 行あたりのバイト数に行数を掛けると、バイト数640になり2211840ます。8繰り返しになりますが、追加のバイトが残っています。それらの8バイトの問題は何ですか?未使用ですか?彼らは最後にいますか?

その問題に光を当てるアドバイスは大歓迎です、ありがとう.

0 投票する
1 に答える
272 参照

ios - フレームレートの測定には、SampleBuffer のどのメソッドを使用する必要がありますか?

私は AvFoundation と協力しています。iOSカメラからのフレームレートを正確に測定する必要があります。

アルゴリズム:

フレーム レート= 1/(time(f2)-time(f1)) = __ ( 1 秒あたりのフレーム数);

ここで、time(f2) – 2 番目のフレームの時間、(f1) – 最初のフレームの時間です。sampleBufferを使ってどうする?

0 投票する
0 に答える
615 参照

objective-c - AVCaptureSession ピクセル形式の会話

ドキュメントには、AVCaptureVideoDataOutput.availableVideoCVPixelFormatTypes配列の最初の要素が使用するのに最も効率的なピクセル形式であると記載されています (つまり、それ以上の変換作業は必要ありません)。

ビデオ出力Metalを操作するために使用する予定です。CMSampleBuffer

要するに、

サンプル バッファを BGRA( kCVPixelFormatType_32BGRA) として配信するようにキャプチャ セッションを設定する方が理にかなっているでしょうか? または、YCbCr( kCVPixelFormatType_420YpCbCr8BiPlanarFullRange) から RGB への変換は、金属を使用する場合により優れたパフォーマンスを提供しますか?