HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iOS9中缺少AVAssetExportSession音频大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个导出视频文件代码.代码在iOS8上运行良好,但在iOS9设备上,视频文件没有声音.
我认为问题出在AVAssetExportSession上,但我无解决问题并修复它.
同样奇怪的是,当我导出它进行播放时,资产可以正常工作.

(void)export {
self.videoComposition.renderScale   = 1.0;
self.videoComposition.animationTool = [self coreAnimationTool];


FakeAsset * assetFaker = [FakeAsset new];
[assetFaker fakeAssetWithDuration:self.currentTime completitionBlock:^(AVAsset *asset) {
    [self addEmptyBACkgroundTrackFromAsset:asset];
    AVAssetExportSession * exportSession    =
    [AVAssetExportSession exportSessionWithAsset:[self.composition copy]
                                      presetName:AVAssetExportPresetHighestQuality];
    [MovieExport setCurrentexporter:exportSession];


    NSUInteger i = 0;
    NSString * path;
    do {
        path  =
        [NstemporaryDirectory() StringByAppendingPathComponent:[NSString StringWithFormat:@"movieExport%i.mov",i]]; i++;
    } while ([[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:NULL]);

    NSURL * url = [NSURL fileURLWithPath:path];
    if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
        [[NSFileManager defaultManager] removeItemAtURL:url error:nil];
    }
    exportSession.outputURL                 = url;
    exportSession.outputFileType            = AVFileTypeMPEG4;
    exportSession.au@L_277_8@mix                  = self.au@L_277_8@mix;
    exportSession.videoComposition          = self.videoComposition;
    exportSession.timeRange                 = CMTimeRangeMake(kCMTimeZero,self.currentTimE);
    [exportSession exportAsynchronouslyWithCompletionHandler:^{
        switch (exportSession.status) {
            case AVAssetExportSessionStatusCompleted:
                self.callBACk(@{MovieCreatorVideoURL : exportSession.outputURL},nil);
                break;
            case AVAssetExportSessionStatusFailed:
                self.callBACk(nil,exportSession.error);
                break;
            case AVAssetExportSessionStatusCancelled:
                self.callBACk(nil,exportSession.error);
                break;
            default:
                break;
        }
    }];
}];
}

- (void)exportForPlayBACk {
self.videoComposition.renderScale = 2.0;
FakeAsset * assetFaker = [FakeAsset new];
[assetFaker fakeAssetWithDuration:self.currentTime completitionBlock:^(AVAsset *asset){
    [self addEmptyBACkgroundTrackFromAsset:asset];
    AVPlayerItem  * playerItem  = [AVPlayerItem  playerItemWithAsset:self.composition];
    playerItem.videoComposition = self.videoComposition;
    playerItem.au@L_277_8@mix         = self.au@L_277_8@mix;

    MovieMetadata * MetaData   = [MovieMetadata new];
    MetaData.orderedElements   = self.orderedElements;
    MetaData.orderedR_681_11845@arkers    = self.movieMarkers;
    MetaData.elementBeginTimes = self.elementBeginTimes;
    MetaData.filmSize          = self.filmSize;
    MetaData.filmFormat        = self.filmFormat;
    MetaData.filmQuality       = self.filmQuality;

    self.userInfos =
    @{MovieCreatorAnimations     : self.animationLayer,MovieCreatorAVPlayerItem   : playerItem,MovieCreatorMetadata       : MetaData};
    self.callBACk(self.userInfos,nil);
}];

}

解决方法

发现了这个问题.
我的AVMutableComposition有多个AVMutableCompositionTrack.如果一个AVMutableCompositionTrack没有轨道,导出的视频将在iOS9上静音但在iOS8上可以正常工作

解决此问题,当我初始化AVMutableCompositionTrack时,我添加没有声音的音频.

-(void)initEmptyAudio:(AVMutableCompositionTrack *) obj{
NSString* path = [[NSBundle mainBundle] pathForresource:@"emptyAudio" ofType:@"mp3"];
NSURL*    audio_inputFileUrl = [NSURL fileURLWithPath:path];
AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:audio_inputFileUrl options:nil];
CMTimeRange audio_timeRange = CMTimeRangeMake(kCMTimeZero,audioAsset.duration);

[obj insertTimeRange:audio_timeRange ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectATindex:0] atTime:CMTimeMake(0,1) error:nil];
}

大佬总结

以上是大佬教程为你收集整理的iOS9中缺少AVAssetExportSession音频全部内容,希望文章能够帮你解决iOS9中缺少AVAssetExportSession音频所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。