OStack程序员社区-中国程序员成长平台

标题: ios - 应用程序录制的视频在手机上播放时有时不播放音频 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 12:09
标题: ios - 应用程序录制的视频在手机上播放时有时不播放音频

我们的应用录制和播放(那些)视频。但不知何故,有些视频播放时没有声音。

如果我通过 iTunes 将视频文件复制到 mac,它会播放有声视频,所以视频确实有声音。

我使用工具(称为 GSpot)检查了视频,它们都具有相同的音频编解码器和比特率。

我尝试了我在 SO 上找到的所有内容,但有些视频不播放音频,而且代码始终相同,而且视频确实有声音,就像在 mac 上一样,你可以听到。

这就是我设置播放器的方式

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];

我不知道这是否相关,但音频似乎无法在录制期间覆盖不同 View 的视频上播放。录制时可以在视频预览上覆盖全屏 View ,它可以很好地录制,并且文件本身有音频,并且它们在 pc/mac 上可以正常播放......仅在我们应用程序内的设备上这些视频(再次,不确定如果相关)没有音频。应用程序对每个视频都使用相同的代码,所以我可以重命名它们,交换它们等,行为与视频的音频 channel 有关。

编辑

补充观察: 没有声音的视频,quicktime(仅在mac上)也不会播放音频。 Windows 上的 QT 确实播放音频,Windows 上的所有其他播放器也播放音频。 手机不知何故损坏了自己的录音,以至于之后它无法识别刚刚录制的音频 channel

编辑 2

iPhone 6、iOS 8.1beta 2 -> 如上所述 iPhone 4S、iOS 7.1.2 -> 没有问题 iPad mini,iOS 8.0.2 -> 总是有问题,没有一个视频音频 channel 可以读取,但始终存在并且 windows 可以播放音频



Best Answer-推荐答案


我想总结一下。

文件保存为“.mp4”,这会导致偶发错误。 将文件另存为“.mov”有效。相同的编解码器等,但没有错误。

NSString *path = [[documentsDirectoryPath stringByAppendingPathComponent:
   [NSString stringWithFormat"/%@", name]] stringByAppendingString".mov"];

outputURL = [[NSURL alloc] initFileURLWithPath:path];

[mAVCaptureMovieFileOutput startRecordingToOutputFileURLutputURL recordingDelegate:self];

关于ios - 应用程序录制的视频在手机上播放时有时不播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26466345/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4