所以你要记录视频,并在同一时间播放音乐从用户的库?再看看。以下是答案。如何录制视频,并在同一时间播放音频(SWIFT教程)
3
A
回答
6
对于音频播放,您将使用AVAudioPlayer
。您所要做的就是将AVAudioPlayer
声明为全局变量(我将其命名为audioPlayer)并实现以下代码。
使用此在用户后选择了歌曲他/她想要玩:
func mediaPicker(mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) {
let pickerItem: MPMediaItem = mediaItemCollection.items[0]
let songURL = pickerItem.valueForProperty(MPMediaItemPropertyAssetURL)
if let sURL = songURL as? NSURL
{
songTitle = pickerItem.title!
do
{
audioPlayer = try AVAudioPlayer(contentsOfURL: sURL)
}
catch
{
print("Can't Create Audio Player: \(error)")
}
}
dismissViewControllerAnimated(true, completion: {() -> Void in
audioPlayer.play()
})
}
您还需要设置音频会议(在viewDidLoad
)。如果你想音频录制,同时发挥它的关键:
// Audio Session Setup
do
{
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
}
catch
{
print("Can't Set Audio Session Category: \(error)")
}
AVAudioSessionCategoryOptions.MixWithOthers
do
{
try audioSession.setMode(AVAudioSessionModeVideoRecording)
}
catch
{
print("Can't Set Audio Session Mode: \(error)")
}
// Start Session
do
{
try audioSession.setActive(true)
}
catch
{
print("Can't Start Audio Session: \(error)")
}
现在的录像。您将使用AVCaptureSession
。声明下面的全局变量:
let captureSession = AVCaptureSession()
var currentDevice: AVCaptureDevice?
var videoFileOutput: AVCaptureMovieFileOutput?
var cameraPreviewLayer: AVCaptureVideoPreviewLayer?
然后在viewDidLoad
配置会话。注:视频预览是一个容器中,整个视频相关的代码是在不同的视图控制器,但只使用一个视图,而不是一个容器,应该只是作为罚款:
// Preset For 720p
captureSession.sessionPreset = AVCaptureSessionPreset1280x720
// Get Available Devices Capable Of Recording Video
let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo) as! [AVCaptureDevice]
// Get Back Camera
for device in devices
{
if device.position == AVCaptureDevicePosition.Back
{
currentDevice = device
}
}
let camera = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
// Audio Input
let audioInputDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeAudio)
do
{
let audioInput = try AVCaptureDeviceInput(device: audioInputDevice)
// Add Audio Input
if captureSession.canAddInput(audioInput)
{
captureSession.addInput(audioInput)
}
else
{
NSLog("Can't Add Audio Input")
}
}
catch let error
{
NSLog("Error Getting Input Device: \(error)")
}
// Video Input
let videoInput: AVCaptureDeviceInput
do
{
videoInput = try AVCaptureDeviceInput(device: camera)
// Add Video Input
if captureSession.canAddInput(videoInput)
{
captureSession.addInput(videoInput)
}
else
{
NSLog("ERROR: Can't add video input")
}
}
catch let error
{
NSLog("ERROR: Getting input device: \(error)")
}
// Video Output
videoFileOutput = AVCaptureMovieFileOutput()
captureSession.addOutput(videoFileOutput)
// Show Camera Preview
cameraPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
view.layer.addSublayer(cameraPreviewLayer!)
cameraPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
let width = view.bounds.width
cameraPreviewLayer?.frame = CGRectMake(0, 0, width, width)
// Bring Record Button To Front & Start Session
view.bringSubviewToFront(recordButton)
captureSession.startRunning()
print(captureSession.inputs)
然后创建一个@IBAction
的处理当用户按下录音键(我只用一个简单的按钮,我做了红色的圆):
@IBAction func capture(sender: AnyObject) {
do
{
initialOutputURL = try NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true).URLByAppendingPathComponent("output").URLByAppendingPathExtension("mov")
}
catch
{
print(error)
}
if !isRecording
{
isRecording = true
UIView.animateWithDuration(0.5, delay: 0.0, options: [.Repeat, .Autoreverse, .AllowUserInteraction], animations: {() -> Void in
self.recordButton.transform = CGAffineTransformMakeScale(0.75, 0.75)
}, completion: nil)
videoFileOutput?.startRecordingToOutputFileURL(initialOutputURL, recordingDelegate: self)
}
else
{
isRecording = false
UIView.animateWithDuration(0.5, delay: 0, options: [], animations: {() -> Void in
self.recordButton.transform = CGAffineTransformMakeScale(1.0, 1.0)
}, completion: nil)
recordButton.layer.removeAllAnimations()
videoFileOutput?.stopRecording()
}
}
然后都在那里是留给你做的是保存视频到(大概)相机胶卷。但我不会包括这一点。你必须自己付出一些努力。 (提示:UISaveVideoAtPathToSavedPhotosAlbum
)
这就是它的伙计。这就是您如何使用AVFoundation
录制视频并同时从库中播放音乐的方式。
相关问题
- 1. 录制音频并同时播放
- 2. 同时在iphone上播放音频和录制视频
- 3. 同时播放HTML5视频和音频
- 4. 同时播放和录制音频
- 5. 同时录制音频和播放iPod?
- 6. 同时录制和播放音频
- 7. 在播放声音时录制音频
- 8. 录制视频/音频时播放系统声音
- 9. 如何录制音频并在Iphone sdk中播放录制的音频?
- 10. 在iOS中录制视频时播放音频文件
- 11. 播放视频(MSDN教程)
- 12. 如何在iphone sdk中播放视频时录制视频?
- 13. 录制和播放音频
- 14. 如何在iPod仍在播放音频时将视频静音?
- 15. MediaElement.js使用同一个播放器播放音频和视频
- 16. 同时录制视频和播放视频
- 17. 如何播放YouTube视频的音频?
- 18. 如何录制音频和播放C#
- 19. 当在视频视图中播放视频时,语音不会录制在android
- 20. 视频/声音/ MIDI播放器时间
- 21. 如何从默认音频设备录制和播放音频
- 22. ios - 在视频播放后录制音频
- 23. 如何从播放音乐播放器录制音频
- 24. Gstreamer一起播放音频和视频
- 25. 从URL播放视频并通过相机同时录制视频 - 目标C
- 26. 同时录制带有AVCaptureSession和回放音频的音频/视频?
- 27. Android:同步视频播放和录制
- 28. Android线程和音频同时播放
- 29. 同时录制音频和播放声音 - C# - Windows Phone 8.1
- 30. 媒体播放器同步播放音频和视频android