0

私はこの機能を使って、オーディオファイルの特定の部分をトリミングしました。 この関数では、2つのAVMetadataItemsを新しいファイルに書き込みます。 後でこれらの項目にアクセスしようとしましたが、そのURLをAvURlAssetでラップしてから、AVAssetのmetaData/commonMetadataにアクセスしていましたが、その前に追加した項目は含まれていませんでした。AVMetaDateItemをファイルに書き込んで後でアクセスする方法は?

ファイルをエクスポートする前に何が起きているのかを確認しました.export.metadataに配列AVMetadataitemを指定したにもかかわらず、エクスポート前にまだnilであるように見えます。

何が問題なのですか?

func trimFromOffSetWithDuration(_ from: Date, startOffSet: TimeInterval, duration: TimeInterval, newfileName: String, file: URL, completion: fileExportaionBlock?) { 

    if let asset = AVURLAsset(url: file) as AVAsset? { 

     let trimmedFileUrl = documentsDirectory().appendingPathComponent(newfileName) 

     let exporter = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetAppleM4A) 
     exporter?.outputFileType = AVFileTypeAppleM4A 
     exporter?.outputURL = trimmedFileUrl 

     let start = CMTimeMake(Int64(startOffSet), 1) 
     let end = CMTimeMake(Int64(startOffSet + duration), 1) 
     exporter?.timeRange = CMTimeRangeFromTimeToTime(start, end) 

     let typeMetaDataItem = AVMutableMetadataItem() 
     typeMetaDataItem.key = AVMetadataCommonKeyDescription as NSCopying & NSObjectProtocol 
     typeMetaDataItem.keySpace = AVMetadataKeySpaceCommon 
     typeMetaDataItem.value = TrackType.recording.rawValue as NSCopying & NSObjectProtocol 

     let dateMetaDataItem = AVMutableMetadataItem() 
     dateMetaDataItem.key = AVMetadataCommonKeyCreationDate as NSCopying & NSObjectProtocol 
     dateMetaDataItem.keySpace = AVMetadataKeySpaceCommon 
     dateMetaDataItem.value = from as NSCopying & NSObjectProtocol 

     exporter?.metadata? = [dateMetaDataItem, typeMetaDataItem] 
     exporter?.exportAsynchronously { handler in 

      if exporter?.status != AVAssetExportSessionStatus.completed { 
       print("Error while exporting \(exporter?.error?.localizedDescription ?? "unknown")") 
       completion?(nil) 
       return 
      } 
     } 

     completion?(trimmedFileUrl) 
    } 
} 

答えて

0

あなたはexportAsynchronouslyの完了ブロック内completion?(trimmedFileUrl)を移動する必要があります。

+0

私はあなたが意味することを得るが、それはまだ動作していない、それは問題ではありません、どのように感謝! –

関連する問題