問題タブ [avcomposition]

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 投票する
0 に答える
139 参照

ios - AVComposition の正しい TimeMapping

複数のセグメントと可変速度を使用して、ビデオのAVComposition適切な位置を取得したいと考えています。CMTime

私が行った場合:

構図の速度が変化するため、時間が適切ではありません。何日も試してみましたが、方法が見つかりません。

私も使用してみsamplePresentationTimeForTrackTimeましたが、それは TARGET (Composition) 時間を SOURCE (Asset) 時間にマッピングすることです。反対のことが必要で、SOURCE (Asset) で知っている位置を TARGET (Composition) のマッピングされた位置にマッピングします。 )。

何か案は?

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

ios - AVPlayer が 2 つ以上のクリップを含む AVComposition を再生しない

ここのコードに基づいて、AVComposition を使用してビデオ アセットをつなぎ合わせようとしています: https://developer.apple.com/library/mac/samplecode/AVCompositionDebugViewer/Introduction/Intro.html

OSX では完全に動作しますが、iOS で AVPlayer を介して再生する場合、1 つまたは 2 つの入力クリップでしか動作しません。3 分の 1 を追加しようとすると、AVPlayerLayer で何も再生されません。奇妙なことに、addPeriodicTimeObserverForInterval を使用して AVPlayer の再生時間を観察すると、ビデオは正しい時間再生されているように見えますが、レイヤーでは何も再生されません。これがなぜなのか、誰にも洞察がありますか?

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

ios - AVComposition を使用したカスタム resourceLoader

AVComposition でカスタム resourceLoader を使用する方法はありますか? AVURLAsset で resourceLoader を設定し、そのアセットで AVPlayerItem を作成すると、AVAssetResourceLoaderDelegate コールバックを取得します。しかし、AVComposition で同じ AVURLAsset を使用すると、デリゲート コールバックを取得できません。実際、アセットをコンポジションに挿入する呼び出しから戻ることはありません。

AVURLAsset で呼び出される AVAssetResourceLoaderDelegate メソッド:

AVComposition に挿入された AVURLAsset で呼び出されない AVAssetResourceLoaderDelegate メソッド:

(実際には、insertTimeRange:ofAsset:atTime:error でハングします。その時点で変更された URL からロードしようとしていると思いますが、デリゲートは使用していません。)

リソース ローダー デリゲートが呼び出されるように URL スキームを微調整するメソッド:

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

ios - 複数のセグメントで AVMutableCompositionTrack を編集するには?

iPhone 用のビデオ エディターで、AVMutableCompositionTrack に複数のセグメントを追加する機能があります。私は次の方法を使用しています

すべて正常に動作します。ここで、compositionTrack に既に追加されている各セグメントの startTime をインクリメントする必要があります。これまでのところ、すべてのセグメントを削除して最初から新しい位置に書き直す以外にメカニズムは見つかりませんでした。

  • composerTrack 内のすべての AVCompositionTrackSegment を取得し、ターゲットの startTime を変更しようとしましたが、割り当てられません。
  • 私が試してみました[self.compositionVideoOneTrack removeTimeRange:videoSegmentData.videoTimeRange];

セグメントを削除してから、適切な位置に再度挿入します。ただし、この呼び出しにより、削除されたセグメントの隣にあるすべてのセグメントが左に移動します。適切な位置にあるインサートは、左に移動したセグメントと重なっています。

解決策を楽しみにしています。

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

ios - カスタム AVVideoCompositing クラスが期待どおりに動作しない

CIFilter を AVAsset に適用し、フィルターを適用して保存しようとしています。私がこれを行う方法は、カスタムクラスを持つオブジェクトにAVAssetExportSessionwithvideoCompositionセットを使用することです。AVMutableVideoCompositionAVVideoCompositing

instructionsまた、AVMutableVideoCompositionオブジェクトの をカスタム合成命令クラス (に準拠) に設定していますAVMutableVideoCompositionInstruction。このクラスには、他のいくつかの重要でない変数とともに、トラック ID が渡されます。

残念ながら、問題が発生しましたstartVideoCompositionRequest:。カスタム ビデオ コンポジター クラス (に準拠AVVideoCompositing) の関数が正しく呼び出されません。

passthroughTrackIDカスタム命令クラスの変数をトラック ID に設定するとstartVideoCompositionRequest(request)、my の関数がAVVideoCompositing呼び出されません。

しかし、passthroughTrackIDカスタム命令クラスの変数を設定しないと、startVideoCompositionRequest(request) 呼び出されますが、正しくはありません。印刷request.sourceTrackIDsすると空の配列になりrequest.sourceFrameByTrackID(trackID)、nil 値になります。

私が見つけた興味深いことはcancelAllPendingVideoCompositionRequests:、フィルターを使用してビデオをエクスポートしようとすると、関数が常に 2 回呼び出されることでした。呼び出されない場合は、前後startVideoCompositionRequest:に 1 回、または連続して 2 回startVideoCompositionRequest:呼び出されます。

フィルターを使用してビデオをエクスポートするための 3 つのクラスを作成しました。基本的に関数を含みexport、必要なすべてのコードを呼び出すユーティリティ クラスを次に示します。

他の 2 つのクラスは次のとおりです。この投稿を短くするために、両方を 1 つのコード ブロックにまとめます。

これに関するガイダンスとして、 Apple の AVCustomEdit サンプル プロジェクトをよく調べてきましたが、これが発生する理由を見つけることができないようです。

request.sourceFrameByTrackID:関数を正しく呼び出して、CVPixelBuffer各フレームに有効な値を提供するにはどうすればよいですか?