je tente d'enregistrer un fichier vidéo de la caméra iPhone avec ce code:Aucun audio est joué après l'enregistrement vidéo avec AVCaptureMovieFileOutput
class Camera {
...
private func loadDeviceInput() {
let devices = AVCaptureDevice.devices() as! [AVCaptureDevice]
for device in devices {
if device.hasMediaType(AVMediaTypeVideo) {
if device.position == .Back {
_deviceBack = device
_inputBack = try? AVCaptureDeviceInput(device: device)
}
else if device.position == .Front {
_deviceFront = device
_inputFront = try? AVCaptureDeviceInput(device: device)
}
}
else if device.hasMediaType(AVMediaTypeAudio) {
_inputAudio = try? AVCaptureDeviceInput(device: device)
}
}
}
private func loadDeviceOutput() {
_outputStill = AVCaptureStillImageOutput()
_outputStill?.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
if _session.canAddOutput(_outputStill) {
_session.addOutput(_outputStill)
}
_outputAudio = AVCaptureAudioDataOutput()
if _session.canAddOutput(_outputAudio) {
_session.addOutput(_outputAudio)
}
_outputVideo = AVCaptureMovieFileOutput()
_outputVideo?.movieFragmentInterval = CMTimeMake(1, 1) // Save file header every second
if _session.canAddOutput(_outputVideo) {
_session.addOutput(_outputVideo)
}
}
func startVideoCapture(writeTo file: NSURL, startedBlock: JrmgxNSURLResultBlock, stopedBlock: JrmgxNSURLResultBlock) {
isSessionRunning()
prepareForVideoCapture()
_startVideoCaptureBlock = startedBlock
_stopVideoCaptureBlock = stopedBlock
if _outputVideo?.connectionWithMediaType(AVMediaTypeVideo)?.active ?? false == true {
_outputVideo?.startRecordingToOutputFileURL(file, recordingDelegate: self)
}
else {
// ERROR
}
}
...
}
et jusqu'à présent, cela fonctionne, mais quand je la lecture de la vidéo à l'aide AVPlayer aucun son n'est joué. Si j'essaie la vidéo avec Quiktime, même problème, pas de son. MAIS quand je l'ouvre avec VLC, le son joue.
Pour référence c'est la façon dont je joue la vidéo, qui fonctionne, mais sans le son:
player = AVPlayer(URL: v)
player.actionAtItemEnd = .None
player.muted = false
player.volume = 1
player.play()
J'inspectée la vidéo avec ffprone
:
$ ffprobe test4.mp4
ffprobe version 2.8.1
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test4.mp4':
Metadata:
major_brand : qt
minor_version : 0
compatible_brands: qt
creation_time : 2016-01-21 13:13:55
Duration: 00:00:06.37, start: 0.000000, bitrate: 818 kb/s
Stream #0:0(und): Video: h264 (Baseline) (avc1/0x31637661), yuv420p(tv, smpte170m/bt709/bt709), 480x360, 741 kb/s, 30.01 fps, 30 tbr, 600 tbn, 1200 tbc (default)
Metadata:
rotate : 90
creation_time : 2016-01-21 13:13:55
handler_name : Core Media Video
Side data:
displaymatrix: rotation of -90.00 degrees
Stream #0:1(und): Audio: aac (LC) (mp4a/0x6134706D), 44100 Hz, mono, fltp, 62 kb/s (default)
Metadata:
creation_time : 2016-01-21 13:13:55
handler_name : Core Media Audio
Je ne sais pas ce qui est faux, pourriez-vous m'aider?
Merci
J'ai changé le fichier NSURL du fichier de video.mp4 en video.mov et le son fonctionne maintenant. Si vous pouviez m'expliquer pourquoi, il sera encore apprécié :) – jrmgx
Je ne pouvais pas trouver dans les docs pour 'AVPlayer',' AvPlayerItem' ou 'AVAsset', peut-être que AVPlayer ne peut pas lire – MikeG
mp4 Cette info peut vous aider http : //www.differencebetween.net/technology/difference-between-mov-and-mp4/ –