如何在使用 AVSession 录制视频时静音?
How to mute audio in recording video using AVSession?
我正在尝试创建类似 dubsmash 的应用程序。我想在录制视频时静音并只播放自定义音频。我正在使用 AVPlayer 播放自定义音频。我的问题是只录制视频静音而不录制自定义音频。我试图设置 AVAudioSessionCategoryPlayback 但是,它们使两种声音都静音。请提出一些想法
正在合并音频和视频:
-(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;
}
我正在尝试创建类似 dubsmash 的应用程序。我想在录制视频时静音并只播放自定义音频。我正在使用 AVPlayer 播放自定义音频。我的问题是只录制视频静音而不录制自定义音频。我试图设置 AVAudioSessionCategoryPlayback 但是,它们使两种声音都静音。请提出一些想法
正在合并音频和视频:
-(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;
}