如何使用 AVAudioPlayer 关闭视频中的音频?
How to turn off audio from a video using AVAudioPlayer?
我有一个简单的摄像头,可以录制视频然后转换为视频预览。在它里面有一个按钮,hwne 按下 segues 回到相机。然而,当我这样做时,视频音频不会停止。我怎样才能删除它(不是静音)以便拍摄新视频?
下面是我尝试过的视频预览代码
class VideoPlayback: UIViewController {
//receives url video value from VideoViewController
var videoURL: URL!
//place where video gets displayed
@IBOutlet weak var videoView: UIView!
var avPlayer = AVPlayer()
private var playerQueue: AVQueuePlayer!
private var playerItem1: AVPlayerItem!
private var playerLooper: AVPlayerLooper!
private var playerLayer: AVPlayerLayer!
override func viewDidLoad() {
super.viewDidLoad()
print(avPlayer, "avPlayer")
print("videoURL", videoURL)
playerItem1 = AVPlayerItem(url: videoURL as URL)
print(playerItem1, "playerItem1")
playerQueue = AVQueuePlayer(playerItem: playerItem1)
print(playerQueue, "player queue")
playerLayer = AVPlayerLayer(player: playerQueue)
print(playerLayer, "playerLayer")
playerLooper = AVPlayerLooper(player: playerQueue, templateItem: playerItem1)
print(playerLooper, "player looper")
playerLayer.frame = view.bounds
playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
print(videoView, "yruewioq")
videoView.layer.insertSublayer(playerLayer, at: 0)
view.layoutIfNeeded()
self.playerQueue?.play()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
//attempt at turing audio off
playerQueue = nil
}
@IBAction func cancelVidPreviewButton(_ sender: Any) {
performSegue(withIdentifier: "cancelVideo", sender: self)
}
}
更新:
我也试过了playerLayer.isMuted = true
但是我知道它没有成员isMuted
您可以使用AVPlayer's
volume
属性 来控制AVPlayer 的音量。
设置volume
为0
可以静音。
根据 Documentation:
A value of 0.0 indicates silence; a value of 1.0 (the default)
indicates full audio volume for the player instance.
希望对您有所帮助
如果我理解正确,您需要确保音频会话在继续之前结束。不过,将音量设置为零可能会影响音频会话。
所以我看到实际上这里需要做的是所有有音频的视频数据都需要删除,如下所示
self.playerQueue?.removeAllItems()
但是,如果您想删除音频,只需 .pause()
然后删除数据即可。这里是 docs
我有一个简单的摄像头,可以录制视频然后转换为视频预览。在它里面有一个按钮,hwne 按下 segues 回到相机。然而,当我这样做时,视频音频不会停止。我怎样才能删除它(不是静音)以便拍摄新视频?
下面是我尝试过的视频预览代码
class VideoPlayback: UIViewController {
//receives url video value from VideoViewController
var videoURL: URL!
//place where video gets displayed
@IBOutlet weak var videoView: UIView!
var avPlayer = AVPlayer()
private var playerQueue: AVQueuePlayer!
private var playerItem1: AVPlayerItem!
private var playerLooper: AVPlayerLooper!
private var playerLayer: AVPlayerLayer!
override func viewDidLoad() {
super.viewDidLoad()
print(avPlayer, "avPlayer")
print("videoURL", videoURL)
playerItem1 = AVPlayerItem(url: videoURL as URL)
print(playerItem1, "playerItem1")
playerQueue = AVQueuePlayer(playerItem: playerItem1)
print(playerQueue, "player queue")
playerLayer = AVPlayerLayer(player: playerQueue)
print(playerLayer, "playerLayer")
playerLooper = AVPlayerLooper(player: playerQueue, templateItem: playerItem1)
print(playerLooper, "player looper")
playerLayer.frame = view.bounds
playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
print(videoView, "yruewioq")
videoView.layer.insertSublayer(playerLayer, at: 0)
view.layoutIfNeeded()
self.playerQueue?.play()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
//attempt at turing audio off
playerQueue = nil
}
@IBAction func cancelVidPreviewButton(_ sender: Any) {
performSegue(withIdentifier: "cancelVideo", sender: self)
}
}
更新:
我也试过了playerLayer.isMuted = true
但是我知道它没有成员isMuted
您可以使用AVPlayer's
volume
属性 来控制AVPlayer 的音量。
设置volume
为0
可以静音。
根据 Documentation:
A value of 0.0 indicates silence; a value of 1.0 (the default) indicates full audio volume for the player instance.
希望对您有所帮助
如果我理解正确,您需要确保音频会话在继续之前结束。不过,将音量设置为零可能会影响音频会话。
所以我看到实际上这里需要做的是所有有音频的视频数据都需要删除,如下所示
self.playerQueue?.removeAllItems()
但是,如果您想删除音频,只需 .pause()
然后删除数据即可。这里是 docs