代码之家  ›  专栏  ›  技术社区  ›  Developer1205

如何在使用AVSession录制视频时静音?

  •  0
  • Developer1205  · 技术社区  · 6 年前

    我正在尝试创建像dubsmash这样的应用程序。我想在录制视频静音音频和播放只有自定义音频。我正在使用AVPlayer播放自定义音频。我的问题是静音只录制视频,而不是自定义音频。我试着设置一个音频会话类别播放,但是,他们都静音。请提出一些建议

    1 回复  |  直到 6 年前
        1
  •  0
  •   Developer1205    6 年前

    正在合并音频和视频:

    -(NSURL *)videoAndAudioMergin:(NSURL *)videoTrack
    {
        NSURL *playerurl = [[NSBundle mainBundle] URLForResource:trackName
                                                   withExtension:@"mp3"
                                                    subdirectory:nil];
        AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:playerurl options:nil];
        AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:videoTrack options:nil];
    
        AVMutableComposition* mixComposition = [AVMutableComposition composition];
    
        AVMutableCompositionTrack *compositionCommentaryTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio
                                                                                            preferredTrackID:kCMPersistentTrackID_Invalid];
        [compositionCommentaryTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAsset.duration)
                                            ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]
                                             atTime:kCMTimeZero error:nil];
    
        AVMutableCompositionTrack *compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo
                                                                                       preferredTrackID:kCMPersistentTrackID_Invalid];
        [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration)
                                       ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]
                                        atTime:kCMTimeZero error:nil];
    
        AVAssetExportSession* _assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition
                                                                              presetName:AVAssetExportPresetHighestQuality];
    
        NSString* videoName = @"export.mov";
    
        NSString *exportPath = [NSTemporaryDirectory() stringByAppendingPathComponent:videoName];
        NSURL    *exportUrl = [NSURL fileURLWithPath:exportPath];
    
    
        return exportUrl;
    }