我们的应用程序记录和播放(那些)视频。但不知何故,有些视频没有声音播放。
如果我通过iTunes将视频文件复制到Mac,它会播放带声音的视频,因此视频确实有声音。
我用一个工具(称为GSpot)检查了视频,它们都具有相同的音频编解码器和比特率。
我尝试了我在SO上找到的所有内容,但有些视频不播放音频,代码总是相同的,视频确实有声音,就像你可以听到的那样。
这是我设置播放器的方式
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *setCategoryError = nil;
[audioSession setActive:YES error:&setCategoryError];
[audioSession setCategory:AVAudioSessionCategoryPlayback
error:&setCategoryError];
_mpviewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL fileURLWithPath:moviepath]];
_mpviewController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
_mpviewController.moviePlayer.controlStyle = MPMovieControlStyleNone;
[_mpviewController.moviePlayer setScalingMode:MPMovieScalingModeAspectFill];
_mpviewController.moviePlayer.shouldAutoplay = YES;
[_mpviewController.moviePlayer prepareToPlay];
_mpviewController.view.frame = CGRectMake(0, 0, _screenWidth, _screenHeight);
[self addSubview:_mpviewController.view];
一段时间后,按下按钮,它开始播放。
记录设置
[_session beginConfiguration];
[_session setSessionPreset: AVCaptureSessionPreset640x480];
AVCaptureDevice * videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
BOOL lock = [videoDevice lockForConfiguration:&error];
if(lock) videoDevice.focusMode = AVCaptureFocusModeContinuousAutoFocus;
[videoDevice unlockForConfiguration];
if(videoDevice == nil){
assert(0);
}
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:&error];
if(error){
assert(0);
}
[_session addInput:input];
AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
AVCaptureDeviceInput * audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:nil];
if(audioInput != nil) {
[_session addInput:audioInput];
}
[_session commitConfiguration];
我不知道它是否相关但音频似乎无法在录制过程中覆盖不同视图的视频上播放。可以在录制时在视频预览上叠加全屏视图,并且录制得很好,文件本身也有音频,并且它们可以在PC / Mac上正常播放...只在我们应用程序中的设备上播放这些视频(再次,不确定)如果相关)没有音频。应用程序对每个视频使用相同的代码,因此我可以重命名它们,交换它们等,这种行为与视频的音频通道有关。
修改
补充观察: 没有声音,快速时间(仅在Mac上)的视频也不播放音频。 Windows上的QT会播放音频,而Windows上的所有其他播放器也会播放音频。 电话会以某种方式损坏自己的录音,以便之后它无法识别刚刚录制的音频频道
编辑2
iPhone 6,iOS 8.1beta 2 - >如上所述 iPhone 4S,iOS 7.1.2 - >没有任何问题 iPad mini,iOS 8.0.2 - >总是有问题,没有一个视频音频通道可以读取,但总是存在,Windows可以播放音频
答案 0 :(得分:2)
我想把它包起来。
文件保存为“.mp4”,这会导致偶发错误。 将文件保存为“.mov”有效。相同的编解码器等,但没有错误。
NSString *path = [[documentsDirectoryPath stringByAppendingPathComponent:
[NSString stringWithFormat:@"/%@", name]] stringByAppendingString:@".mov"];
outputURL = [[NSURL alloc] initFileURLWithPath:path];
[mAVCaptureMovieFileOutput startRecordingToOutputFileURL:outputURL recordingDelegate:self];