标签: avassetexportsession

在后台启动AVAssetExportSession

我的应用程序做了一些处理,在某些时候它需要调用AVAssetExportSession.

如果会话已经开始,然后我对应用程序进行后台处理,一切都正常完成.不过,如果我的背景之前调用应用程序exportAsynchronouslyWithCompletionHandler.我收到此错误:

AVAssetExportSessionStatusFailed Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo=0x1e550db0 {NSLocalizedFailureReason=An unknown error occurred (-12985), NSUnderlyingError=0x1e574910 "The operation couldn’t be completed. (OSStatus error -12985.)", NSLocalizedDescription=The operation could not be completed}

是否可以在后台启动AVAssetExportSession?

avfoundation ios avassetexportsession

9
推荐指数
1
解决办法
3233
查看次数

AVAssetExportSession每次都失败(错误-12780)

我正在尝试合并一些音频文件(通过MPMediaPickerController选择),但导出始终失败,错误代码为-12780.

当我尝试使用AVPlayer对象播放我的合成时,它会正确播放.只是出口失败了.

我究竟做错了什么?

这是我的代码:

AVAssetExportSession *exportSession;
AVPlayer *player;

- (void)mergeAudiofiles {
    // self.mediaItems is an NSArray of MPMediaItems
    if (self.mediaItems.count == 0) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:@"No Tracks selected."
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        return;
    }

    // Configure audio session
    NSError *sessionError;
    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setCategory:AVAudioSessionCategoryAudioProcessing error:nil];
    [session setActive:YES error:&sessionError];
    if (sessionError) NSLog(@"Session-Error: %@", sessionError.localizedDescription);

    // Create composition
    AVMutableComposition *composition = [AVMutableComposition composition];
    AVMutableCompositionTrack *track = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
    CMTime position = kCMTimeZero;

    for …
Run Code Online (Sandbox Code Playgroud)

avfoundation ios avassetexportsession

9
推荐指数
1
解决办法
8379
查看次数

AVFoundation导出方向错误

我正在尝试将图像和视频结合起来.我将它们组合并输出但是它是旋转的侧面方式.

很抱歉批量代码粘贴.我已经看到了关于应用变换的答案,compositionVideoTrack.preferredTransform但是什么也没做.添加AVMutableVideoCompositionInstruction也没有做任何事情.

我觉得这个区域是事情开始出错的地方.这儿这儿:

// I feel like this loading here is the problem
        let videoTrack = videoAsset.tracksWithMediaType(AVMediaTypeVideo)[0]

        // because it makes our parentLayer and videoLayer sizes wrong
        let videoSize       = videoTrack.naturalSize

        // this is returning 1920x1080, so it is rotating the video
        print("\(videoSize.width) , \(videoSize.height)")
Run Code Online (Sandbox Code Playgroud)

所以在这里我们的帧大小对于该方法的其余部分是错误的.现在,当我们尝试去创建叠加图像层时,框架不正确:

    let aLayer = CALayer()
    aLayer.contents = UIImage(named: "OverlayTestImageOverlay")?.CGImage
    aLayer.frame = CGRectMake(0, 0, videoSize.width, videoSize.height)
    aLayer.opacity = 1
Run Code Online (Sandbox Code Playgroud)

这是我完整的方法.

  func combineImageVid() {

        let path = NSBundle.mainBundle().pathForResource("SampleMovie", ofType:"MOV")
        let fileURL = NSURL(fileURLWithPath: …
Run Code Online (Sandbox Code Playgroud)

camera orientation ios avassetexportsession swift

9
推荐指数
1
解决办法
2791
查看次数

从iOS 10开始,AVAslayer播放失败,而AVAssetExportSession处于活动状态

AVPlayer 将随机播放音频,而不是显示视频轨道...

AVPlayer在进行活动压缩会话时正确播放视频AVAssetExportSession:exportAsynchronouslyWithCompletionHandler现在失败了.它似乎会导致一些不稳定,直到应用程序进入后台并返回.

检查AVURLAsset视频播放失败时,即使没有视频输出,也有视频轨道.我也没有从压缩器或其他播放组件中得到任何错误......压缩会话返回后,问题就会发生一段时间.

我尝试过不同的单独线程但没有成功.

从iOS 10开始,似乎有些事情会导致两个进程之间发生某种冲突......

avplayer avassetexportsession ios10

9
推荐指数
1
解决办法
2367
查看次数

通过AVAssetExportSession将资产导出到文件系统总是失败 - Swift 3

我想将存储在AVPlayerItem中的.mp4-video导出到文件系统.如果成功,我想把它变成一个NSData变量(但这不是问题的一部分,只是想告诉你为什么我想把它存储到文件系统中).

//This is the AVPlayerItem-Object
let item = self.talentView.getCurrentItem()

//They return all true, so the item itself is not the issue
print(item.asset.isPlayable)
print(item.asset.isReadable)
print(item.asset.isExportable)

//Creating Path, where the file will be stored, also tried "video.mp4" at the appending string
var exportPath: NSString = NSTemporaryDirectory().appendingFormat("/video.mp4")
var exportUrl: NSURL = NSURL.fileURL(withPath: exportPath as String) as NSURL

let session = AVAssetExportSession(asset: item.asset, presetName: AVAssetExportPresetPassthrough)             
session?.outputFileType = AVFileTypeMPEG4
session?.outputURL = exportUrl as URL

session?.exportAsynchronously(completionHandler: { 

    //case is always .failed
    switch session!.status {
           case .failed: …
Run Code Online (Sandbox Code Playgroud)

avassetexportsession avasset swift avplayeritem swift3

9
推荐指数
0
解决办法
1043
查看次数

如何从iOS设备的iPod库导出mp3文件?

在我的iOS应用程序中,我正在尝试将mp3文件从iPod库导出到设备上的应用程序文档目录.目前我正在尝试使用AVAssetExportSession,但它不适用于mp3文件.它适用于m4a文件.

  • 是否可以使用AVAssetExportSession导出mp3文件?

  • AVAssetExportSession 的相应outputFileType是什么?(AVFileTypeAppleM4A适用于m4a文件)

谢谢!

mp3 export m4a ios avassetexportsession

8
推荐指数
1
解决办法
2954
查看次数

合并视频但AVAssetExportSession永远不会完成

尝试将一些视频合并在一起并将它们作为单个文件导出,从查看教程/示例看,一切似乎都是正确的但是我的AVAssetExportSession似乎永远不会完整,我的视频文件永远不会被导出,任何关于明显错误的帮助我很失望,我将非常感激.

以下是合并视频的功能

注意循环中的'视频'是一个成员变量var videos = [AVAsset](),它在调用merge之前会被填充(我会检查它).

private func merge()
{
    // Create AVMutableComposition to contain all AVMutableComposition tracks
    var mix_composition = AVMutableComposition()
    var total_time_seconds  = 0.0
    var tracks = [AVCompositionTrack]()

    // Loop over videos and create tracks, keep incrementing total duration
    for video in videos
    {
        // Create the composition track for this video
        let track = mix_composition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: Int32(kCMPersistentTrackID_Invalid))

        // Add video duration to total time
        total_time_seconds = total_time_seconds + video.duration.seconds

        // Add track to array of …
Run Code Online (Sandbox Code Playgroud)

video ios avassetexportsession swift2

8
推荐指数
1
解决办法
608
查看次数

Swift - 压缩视频文件

所以,目前我用它来压缩视频:

func compressVideo(inputURL: NSURL, outputURL: NSURL, handler:(session: AVAssetExportSession)-> Void)
    {
        let urlAsset = AVURLAsset(URL: inputURL, options: nil)

        let exportSession = AVAssetExportSession(asset: urlAsset, presetName: AVAssetExportPresetMediumQuality)

        exportSession!.outputURL = outputURL

        exportSession!.outputFileType = AVFileTypeQuickTimeMovie

        exportSession!.shouldOptimizeForNetworkUse = true

        exportSession!.exportAsynchronouslyWithCompletionHandler { () -> Void in

            handler(session: exportSession!)
        }

    }
Run Code Online (Sandbox Code Playgroud)

当我在2秒内录制视频时,大小为4.3 MB,当我在6秒内录制视频时,文件大小为9,3 MB.

任何减小尺寸的提示?

video xcode ios avassetexportsession swift

8
推荐指数
1
解决办法
1万
查看次数

iOS 6问题将MPMediaItem转换为NSData

我曾尝试过以下代码.

   -(void)mediaItemToData : (MPMediaItem * ) curItem
{
    NSURL *url = [curItem valueForProperty: MPMediaItemPropertyAssetURL];

    AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL: url options:nil];

    AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset: songAsset
                                                                      presetName:AVAssetExportPresetPassthrough];

    exporter.outputFileType =  @"public.mpeg-4";

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * myDocumentsDirectory = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;

    NSString *exportFile = [myDocumentsDirectory stringByAppendingPathComponent:
                            @"exported.mp4"];

    NSURL *exportURL = [NSURL fileURLWithPath:exportFile];
    exporter.outputURL = exportURL;

    // do the export
    // (completion handler block omitted)
    [exporter exportAsynchronouslyWithCompletionHandler:
     ^{
         NSData *data = …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c mpmediaitem avassetexportsession ios6

7
推荐指数
1
解决办法
4405
查看次数

无法使用AVVideoCompositionCoreAnimationTool在视频中显示动画CALayer

更新6:我已经设法完全解决了我的问题,但我仍然想要一个更好的解释,而不是我猜的是如果我不正确它不起作用的原因

我一直试图在视频上制作精灵表,但每次导出视频时,最终结果都是我开始的示例视频.

这是我的代码:

首先我的自定义CALayer来处理我自己的精灵表

class SpriteLayer: CALayer {
    var frameIndex: Int

    override init() {
        // Using 0 as a default state
        self.frameIndex = 0
        super.init()
    }

    required init?(coder aDecoder: NSCoder) {
        self.frameIndex = 0
        super.init(coder: aDecoder)
    }

    override func display() {
        let currentFrameIndex = self.frameIndex
        if currentFrameIndex == 0 {
            return
        }
        let frameSize = self.contentsRect.size
        self.contentsRect = CGRect(x: 0, y: CGFloat(currentFrameIndex - 1) * frameSize.height, width: frameSize.width, height: frameSize.height)
    }

    override func action(forKey event: String) -> CAAction? {
        if …
Run Code Online (Sandbox Code Playgroud)

calayer cabasicanimation avvideocomposition avassetexportsession swift

7
推荐指数
1
解决办法
435
查看次数