問題タブ [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.
ios - マイクからオーディオをキャプチャしているときに、メモリ リークまたはオーディオの過剰なノイズのいずれかで立ち往生しています
マイクからオーディオをキャプチャし、AAC 形式でストリーミング サーバーにストリーミングする必要がある iPhone アプリを作成しています。そのため、最初にオーディオをキャプチャしてから、
オーディオを AAC に変換する方法。
以下はコードです
getAudioBufferDataFromCMSampleBufferRef のコードは次のとおりです。
上記のバージョンのコードでは、BAD_ACCESS エラーが発生します。代わりに、blockBuffer を解放するコードを削除すると、メモリ リークが発生し、メモリ不足のためにアプリが最終的に終了します。
blockBuffer を保持せずに次のコードを記述した場合
以下に示すように異なる
このバージョンでは、ブロックバッファは保持されないため、解放する必要はありません。しかし、オーディオにひどいノイズが入ります。
この問題を解決する方法を知っている人はいますか?
ありがとう、オズグル
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 がフレームを表示するフレームレートを制御する方法を知っている人はいますか?
ios - CMSampleBuffer から Swift のバイト配列へ
マルチピア接続アプリ用のビデオストリームを実装しようとしています。キャプチャされたフレームは VTCompressionSession によって圧縮され、コールバックが呼び出されます。
今、私のCMSamplebufferにはCMBlockBufferが含まれており、この回答で述べたようにNALUなどを抽出できます VideoToolboxを使用してH.264ビデオストリームを解凍する方法ですが、それを行う別の方法を探しています。
CMSampleBuffer のバイト全体を UInt8 配列に書き込むことは可能ですか? CMSampleBuffer の Pointer を取得することはできますが、長さはどのように把握できますか?
英語が下手で申し訳ありませんが、何か問題があればお知らせください。これが私の最初の投稿です。ありがとうございました
ios - Swift で CMSampleBuffer のコピーを作成すると、OSStatus -12743 (無効なメディア形式) が返されます
CMSampleBuffer
の出力を保存するために のディープ クローンを実行しようとしていAVCaptureSession
ます。kCMSampleBufferError_InvalidMediaFormat
(OSStatus -12743)
関数を実行するとエラーが発生しますCMSampleBufferCreateForImageBuffer
。CVImageBuffer
とCMSampleBuffer
形式の説明がどのように一致していないのかわかりません。私がどこで間違ったのか知っている人はいますか?彼女は私のテストコードです。
ios - CVPixelBuffer 内のピクセルを適切に処理する方法は?
簡単な質問は次のとおりです。 のピクセル値に対処する式は何CVPixelBuffer
ですか?
a をフラットなバイト配列に変換しようとしているのですCVPixelBuffer
が、いくつかの奇妙な点に気付きました:CVPixelBuffer
は a から取得されますCMSampleBuffer
。幅と高さは852x640
ピクセルです。合計ピクセルでは、ピクセルあたりのバイトを考慮するとバイト545280
が必要になります。2181120
4
最初の奇妙なことは、同じ行ごとにバイトCVPixelBuffer
が返されることです。これは、ピクセルに十分なスペースです。これらの追加のピクセルはどこから来るのでしょうか? 最終イメージの 1 行がピクセル幅だけで、実際には の行にピクセルがある場合、どのバイトをコピーする必要があるかをどのように知ることができますか? または、未使用のバイトはどれですか? ところで、それらは未使用ですか?3456
864
12
852
864
CVPixelBuffer
もう 1 つのことは、報告されるデータ サイズCVPixelBuffers
(2211848
バイト数) です。ここで、3456
1 行あたりのバイト数に行数を掛けると、バイト数640
になり2211840
ます。8
繰り返しになりますが、追加のバイトが残っています。それらの8
バイトの問題は何ですか?未使用ですか?彼らは最後にいますか?
その問題に光を当てるアドバイスは大歓迎です、ありがとう.
ios - フレームレートの測定には、SampleBuffer のどのメソッドを使用する必要がありますか?
私は AvFoundation と協力しています。iOSカメラからのフレームレートを正確に測定する必要があります。
アルゴリズム:
フレーム レート= 1/(time(f2)-time(f1))
= __ ( 1 秒あたりのフレーム数);
ここで、time(f2) – 2 番目のフレームの時間、(f1) – 最初のフレームの時間です。sampleBufferを使ってどうする?
objective-c - AVCaptureSession ピクセル形式の会話
ドキュメントには、AVCaptureVideoDataOutput.availableVideoCVPixelFormatTypes
配列の最初の要素が使用するのに最も効率的なピクセル形式であると記載されています (つまり、それ以上の変換作業は必要ありません)。
ビデオ出力Metal
を操作するために使用する予定です。CMSampleBuffer
要するに、
サンプル バッファを BGRA( kCVPixelFormatType_32BGRA
) として配信するようにキャプチャ セッションを設定する方が理にかなっているでしょうか? または、YCbCr( kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
) から RGB への変換は、金属を使用する場合により優れたパフォーマンスを提供しますか?