3

AVAssetから初期化できますか..次のような関数を使用してURLからNSData初期化できることを知っていますAVData

 [[AVURLAsset alloc] initWithURL:url options:nil];

AVAsset誰かが私に直接割り当てる同様の方法を提案できますNSDataか?

4

3 に答える 3

3

私の知る限りではありません。AVAssetデバイスの(内部)メディアライブラリ内のアイテムを表すため、カスタムデータを使用して初期化してもあまり意味がありません。おそらく、このクラスにはのパブリック初期化子がないことを言及する価値がありますNSData

これが必要な場合は、おそらくコードロジックを再設計する必要があると思います。

于 2012-12-06T10:57:43.197 に答える
1

受け入れられた答えは正しくありません。

実装を介してAVAssetからを作成することが可能です。NSDataAVAssetResourceLoaderDelegate

具体的には以下を実装します。

func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool

ちがいない:

  1. loadRequest.contentInformationRequestを正しく入力してください。ヒント、使用loadingRequest.contentInformationRequest.contentType = AVFileType.mycontenttype.rawValue
  2. データで正しく応答する

後でコードを投稿しますが、例として「AVAssetResourceLoaderDelegategithub」をグーグルで検索できます。

于 2019-05-18T16:27:09.500 に答える
0

これは私が解決した別の解決策です。間接的に、最初にローカルディレクトリにNSDataを書き込んで/保存してから、そのファイルパスからAVAssetを初期化しました。

AVAsset *asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:locationUrl]];

最初にnsdataをfilepathに書き込んでから、そのパスからAVAssetに初期化してみてください。

[videoData writeToFile: locationUrl atomically:YES];

ファイルの場所のURLが正しいことを確認し、ロードバック時にエラーが発生した場合にデータがそのファイルパスに保存されているかどうかをテスト確認します。最後に、ファイルが不要になった場合は、ファイルをクリーンアップすることを忘れないでください。

于 2020-01-19T06:27:06.603 に答える