問題タブ [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.
ios - AVComposition の正しい TimeMapping
複数のセグメントと可変速度を使用して、ビデオのAVComposition
適切な位置を取得したいと考えています。CMTime
私が行った場合:
構図の速度が変化するため、時間が適切ではありません。何日も試してみましたが、方法が見つかりません。
私も使用してみsamplePresentationTimeForTrackTime
ましたが、それは TARGET (Composition) 時間を SOURCE (Asset) 時間にマッピングすることです。反対のことが必要で、SOURCE (Asset) で知っている位置を TARGET (Composition) のマッピングされた位置にマッピングします。 )。
何か案は?
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 の再生時間を観察すると、ビデオは正しい時間再生されているように見えますが、レイヤーでは何も再生されません。これがなぜなのか、誰にも洞察がありますか?
ios - AVComposition を使用したカスタム resourceLoader
AVComposition でカスタム resourceLoader を使用する方法はありますか? AVURLAsset で resourceLoader を設定し、そのアセットで AVPlayerItem を作成すると、AVAssetResourceLoaderDelegate コールバックを取得します。しかし、AVComposition で同じ AVURLAsset を使用すると、デリゲート コールバックを取得できません。実際、アセットをコンポジションに挿入する呼び出しから戻ることはありません。
AVURLAsset で呼び出される AVAssetResourceLoaderDelegate メソッド:
AVComposition に挿入された AVURLAsset で呼び出されない AVAssetResourceLoaderDelegate メソッド:
(実際には、insertTimeRange:ofAsset:atTime:error でハングします。その時点で変更された URL からロードしようとしていると思いますが、デリゲートは使用していません。)
リソース ローダー デリゲートが呼び出されるように URL スキームを微調整するメソッド:
ios - 複数のセグメントで AVMutableCompositionTrack を編集するには?
iPhone 用のビデオ エディターで、AVMutableCompositionTrack に複数のセグメントを追加する機能があります。私は次の方法を使用しています
すべて正常に動作します。ここで、compositionTrack に既に追加されている各セグメントの startTime をインクリメントする必要があります。これまでのところ、すべてのセグメントを削除して最初から新しい位置に書き直す以外にメカニズムは見つかりませんでした。
- composerTrack 内のすべての AVCompositionTrackSegment を取得し、ターゲットの startTime を変更しようとしましたが、割り当てられません。
- 私が試してみました
[self.compositionVideoOneTrack removeTimeRange:videoSegmentData.videoTimeRange];
セグメントを削除してから、適切な位置に再度挿入します。ただし、この呼び出しにより、削除されたセグメントの隣にあるすべてのセグメントが左に移動します。適切な位置にあるインサートは、左に移動したセグメントと重なっています。
解決策を楽しみにしています。
ios - カスタム AVVideoCompositing クラスが期待どおりに動作しない
CIFilter を AVAsset に適用し、フィルターを適用して保存しようとしています。私がこれを行う方法は、カスタムクラスを持つオブジェクトにAVAssetExportSession
withvideoComposition
セットを使用することです。AVMutableVideoComposition
AVVideoCompositing
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
各フレームに有効な値を提供するにはどうすればよいですか?