Как отключить звук при записи видео с помощью AVSession?

Я пытаюсь создать приложение, как dubsmash. Я хочу отключить звук при записи видео и воспроизведении только собственного звука. Я играю пользовательский звук с помощью AVPlayer. Моя проблема - отключение звука только при записи видео, а не при помощи обычного звука. Я попытался установить AVAudioSessionCategoryPlayback, но они оба отключают звук. Пожалуйста, предложите некоторые идеи

1 ответ

Объединение аудио и видео работает:

-(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;
}
Другие вопросы по тегам