3

NSURLsビデオ参照を含む2 つをマージしようとしています。URL の 1 つは AWS 上のビデオを指し、もう 1 つはローカルに保存されているビデオを指しています。私のエクスポート コードは、2 つのローカル ビデオで試したので機能しますが、HTTP URL とローカル URL を結合しようとすると、常に次のエラーが発生します:Error Domain=NSURLErrorDomain Code=-1100 "The requested URL was not found on this server." UserInfo=0x155d2f20 {NSUnderlyingError=0x155b4f60 "The operation couldn’t be completed. No such file or directory", NSLocalizedDescription=The requested URL was not found on this server.} これは AVAssets を作成するコードです:

AVAsset *firstAsset = [AVAsset assetWithURL:awsURL];

AVAssetExportSessionローカル URL を使用する必要がありますか?

4

3 に答える 3

6

@MichaelScaria、あなたが考え出したことを投稿してくれてありがとう、私はこれに約3日間いました. 以下は、ローカル URL とリモート URL の両方から AVAssets を取得しようとしたときの完全なソリューションです。

+ (AVAsset*)getAVAssetFromRemoteUrl:(NSURL*)url 
{   
    if (!NSTemporaryDirectory())
    {
       // no tmp dir for the app (need to create one)
    }

    NSURL *tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory() isDirectory:YES];
    NSURL *fileURL = [[tmpDirURL URLByAppendingPathComponent:@"temp"] URLByAppendingPathExtension:@"mp4"];
    NSLog(@"fileURL: %@", [fileURL path]);

    NSData *urlData = [NSData dataWithContentsOfURL:url];
    [urlData writeToURL:fileURL options:NSAtomicWrite error:nil];

    AVAsset *asset = [AVAsset assetWithURL:fileURL];
    return asset;
}
+ (AVAsset*)getAVAssetFromLocalUrl:(NSURL*)url
{
    AVURLAsset *asset = [AVAsset assetWithURL:url];
    return asset;
}
于 2014-08-28T06:18:02.720 に答える
3

オンライン URL を一時ディレクトリに保存し、一時 URL を使用してビデオを結合したところ、機能しました。

    NSData *urlData = [NSData dataWithContentsOfURL:initalURL];
    [urlData writeToFile:path options:NSAtomicWrite error:nil]
于 2013-08-10T02:28:12.410 に答える
0

AVURLAsset代わりに または 他のサブクラスを使用する必要があるのではないでしょうか? ドキュメントから:

多くの場合、ストリーム (HTTP ライブ ストリームを含む)、QuickTime ムービー ファイル、MP3 ファイル、その他の種類のファイルなどの視聴覚メディア リソースを参照する NSURL を使用して、AVURLAsset (AVAsset の具体的なサブクラス) を使用してアセットをインスタンス化します。AVComposition が一時的な編集で行うように、視聴覚メディアの基本モデルを便利な方法で拡張する他の具体的なサブクラスを使用して、アセットをインスタンス化することもできます。

于 2013-08-09T10:45:02.123 に答える