問題タブ [core-media]

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 に答える
1020 参照

cocoa - ガベージコレクターがオンの状態でWebviewがクラッシュする

Garnage CollectorがオンのときにWebビューがクラッシュする(オフのときにクラッシュしない)非常に特殊なWebページがあります。

再現が簡単:ドキュメントベースのアプリケーションを作成し、Webビューをドロップして、次の行(おそらくボタン)を作成します。

このシナリオは、Appleが新しいiPadを宣伝している間だけ有効だと思います。ページの下部には、視聴できる2つのビデオがあります。右の方をクリックしてください。再生中に、左上の[閉じる]ボタン(リンク)をクリックします。これにより、#SwapViewPreviousSelectionが送信されます。これで、クラッシュします。

ガベージコレクターについて学習しているところですが、収集されるべきではないものが収集されているのではないかと思います。

ガベージコレクターをオフにする以外に、クラッシュを防ぐことができるアイデアはありますか?

ありがとうございました。

これが私が得るものです:

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

ios - CGImage を CMSampleBufferRef に変換するにはどうすればよいですか?

メソッドを使用して a を に変換し、 aCGImageCMSampleBufferRef追加したいと思います。次のコードを使用してを取得できましたが、結果の を提供すると が返されます。私は何を間違っていますか?AVAssetWriterInputappendSampleBuffer:CMSampleBufferRefappendSampleBuffer:NOCMSampleBufferRef

PS このコードにはメモリ リークがあることはわかっています。わかりやすくするために一部のコードを省略しました。

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

iphone - CMTimeMake - 秒よりも小さい/より分解された値を取得します

次のコードでCMTimeを正常に作成しています:

MPMoviePlayerController 内のムービーの現在の位置 (元々は float 値でした) が CMTime として秒単位で返されますが、これは悪くありません。

しかし、たとえばミリ秒でこの位置を取得するにはどうすればよいですか? 「タイムスケール」をいじって 10 と 100 に設定しましたが、結果に影響はありませんでした。

前もって感謝します!

0 投票する
2 に答える
2373 参照

iphone - 丸めずにCMTimeを使用しますか?

AVFoundationとCMTimeを使用するアプリケーションを作成しています。CMTimeを使用して作成したインスタンスの値をログに記録しましたCMTimeMake()。この値は、最も近い整数に丸められているようです。CMTime丸めることなく、正確な値を持つインスタンスが必要です。

私は参考文献で丸め定数を見てきましたCMTime

これらの戦略のどれをCMTimeインスタンスに適用するかを制御する方法の例はありませんか?CMTimeまたは、これが正しくない場合、インスタンスから正確な値を抽出するにはどうすればよいですか?


編集:

私は見つけてテストしましCMTIME_HAS_BEEN_ROUNDED()た。CMTimeインスタンスをこの関数に渡すと、インスタンスが返されますNo(値が丸められていないことを示します)。では、なぜ私は精度を失っているのですか?

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

objective-c - AVAssetReaderを使用してAudioBufferListにどのように追加しますか?

後でAudioUnitコールバックを使用してAUGraphでオーディオを再生できるように、AVAssetReaderを使用してオーディオアセットの読み込みに取り組んでいます。AUGraphとAudioUnitのコールバックが機能していますが、ディスクからファイルを読み取ります。ファイルが大きすぎると、メモリを大量に消費してアプリがクラッシュします。そのため、代わりにアセットを直接読み取り、限られたサイズのみを読み取っています。次に、それをダブルバッファーとして管理し、必要なときに必要なAUGraphを取得します。

(注:オーディオキューサービスを使用でき、AudioUnitコールバックでAUGraphを使用できるかどうかを知りたいので、iOSフレームワークによってメモリが管理されます。)

私の問題は、Cの配列、構造体、およびポインターについて十分に理解していないことです。ヘルプが必要な部分は、単一のAudioBufferを保持する個々のAudioBufferListを取得し、そのデータをすべてを保持する別のAudioBufferListに追加することです。後で使用するデータ。memcpyを使用する必要があると思いますが、memcpyの使用方法や、目的のためにAudioBufferListを初期化する方法が明確ではありません。ディスクからファイルを読み込むAppleのサンプルプロジェクトであるMixerHostを参照用に使用しています。

Xcodeにロードしたい場合は、進行中の作業をアップロードしました。私はこれを行うために必要なことのほとんどを理解しました。データがすべて1つの場所に収集されたら、準備は整っているはずです。

サンプルプロジェクト:MyAssetReader.zip

ヘッダーでは、bufferListを構造体へのポインターとして宣言していることがわかります。

次に、この方法でbufferListを割り当てます。主に、MixerHostから借用しています...

最後に、読み取りをループします。

特にmemcpyで、mDataByteSizeとmDataを何を処理するのかわかりません。mDataはvoidポインターであるため、これは非常に注意が必要な領域です。

この行では、localBufferListのデータから、bufferListの位置に、データを書き込む場所にポインターを配置するためのフレーム数を加えた値をコピーする必要があると思います。これを機能させるために何を変更する必要があるかについて、いくつかのアイデアがあります。

  • voidポインターは1であり、AudioUnitSampleTypeのポインターのサイズではないため、memcpyを正しい位置に配置するには、sizeof(AudioUnitSampleType)も掛ける必要がある場合があります。
  • mDataを準備するためにmallocを適切に使用していない可能性がありますが、フレーム数がわからないため、初期化するために何をすべきかわかりません。

現在、このアプリを実行すると、bufferListへの無効なポインターでこの関数が終了します。

AudioBufferListの管理方法をよりよく理解するためにご協力いただきありがとうございます。

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

iphone - CVPixelBufferGetBaseAddress のピクセルへの直接アクセスよりも高速なバッファへの最初の memcpy

CVPixelBufferGetBaseAddress直接返されたピクセルにアクセスする (私は 2 つのネストされた for ループを使用しています) と、最初に malloc でバッファーを割り当て、ピクセルをそのバッファーに memcpy してから、そのバッファー内のピクセルにアクセスするよりも約 100 倍遅いことに気付きました。何故ですか?

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

ios - AVFoundation: ファイルからビデオを読み取ります -- フレームとオーディオを処理して再出力します

私はしばらくこれに頭を悩ませてきましたが、何が間違っているのかわかりません。私はビデオファイルを読みたいです - フレームを処理してから再出力します:

私が直面している問題は、何らかの理由で [self.audioOutput copyNextSampleBuffer]; への呼び出しがブロックされ、決して完了しないことです!!

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

cocoa - AVFoundation / CoreMedia / その他のフレームワークを使用してビート / オンセットを検出する

(序文:これはスタック オーバーフローに関する私の最初のオーディオ関連の質問です。そのため、できる限りこれを言葉で表現しようとします。編集を歓迎します。)

ユーザーが音楽をループできるようにするアプリケーションを作成しています。現在、私たちのプロトタイプでは、ループの開始と終了を指定して、これらの「ループ マーカー」(UISliders として実装) を毎秒スナップすることができます。明らかに、音楽をループする場合、これを処理するには秒は非常に大雑把な方法なので、代わりにビートを使用したいと思います。

UISliders がスナップするビートをマークする以外は何もしたくありません。

  • loadMusicメソッドに音声ファイルをフィードします。
  • ライブラリを介して実行して、ビートまたはそれらの間の間隔を検出します(おそらく)。
  • その値をスライダーのsetNumberOfTickMarks:メソッドにフィードします。
  • 利益!

残念ながら、私が Google や SO 経由で見つけた結果のほとんどは、リミキサーが使用するような、はるかに高度なビート検出ライブラリをもたらしました。私の場合はやり過ぎです。

これは、CoreMedia、AVFoundation、または AudioToolbox で処理できるものですか? そうでない場合、これを処理できる他のライブラリはありますか? Apple のドキュメントに関する私の調査では、関連する結果のみが得られました... MIDI ファイルについてです。しかし、Apple 独自のソフトウェアには、 iMovie の snap-to-beats 機能など、このような機能があります。

この時点で、ガイダンス、コード、または要約は非常に役立ちます。

編集:もう少し掘り下げた後、私が探しているものの正しい用語はonset detectionです。

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

objective-c - Mac OS X での AVFoundation + GC

AVFoundation を GC ON で使用するのに問題がある人はいますか???

私が経験しているのは、アセットのトラック プロパティにアクセスすると、コア メディアによってファイルが開いたままになるということです。なぜこれが問題なのかというと、長い間他の多くのメディア ファイルを開くと、最終的に AVFoundation が開いているファイルが多すぎると報告するからです。

Instruments を使用したデバッグ、弱参照、@autoreleasepool など、あらゆることを試しました。最後に、これは GC を使用した Core Media 内のバグです。

だから私は究極の質問はこれだと思います:

GC がオンになっているアプリで、コードの一部のセクションを GC なしで非同期に実行する方法はありますか?

誰か助けてください。

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

ios - iOS で CoreMedia.framework を使用してビデオをデコードする

mp4 ファイルをデコードし、ios アプリで OpenGL を使用して描画する必要があります。mp4 ファイルから h264 フレームを抽出してデコードする必要があり、CoreMedia を使用して何ができるかを聞きました。誰もそれを行う方法を知っていますか? CoreMedia の使用例はありますか?