avplayer播放视频时没有声音
avplayer has no sounds when play video
这是我播放 mp4 的所有代码,mp4 正在播放但没有声音
import UIKit
import AVFoundation
class ViewController: UIViewController {
@IBOutlet weak var containerView: UIView!
var playerLayer:AVPlayerLayer!
var player:AVPlayer!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let path = NSBundle.mainBundle().pathForResource("huoguo", ofType: "mp4")
let url = NSURL(fileURLWithPath: path!)
let asset = AVAsset(URL: url)
let playerItem = AVPlayerItem(asset: asset)
self.player = AVPlayer(playerItem: playerItem)
self.playerLayer = AVPlayerLayer(player: player)
self.playerLayer.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.width * 9 / 16)
self.containerView.layer.addSublayer(playerLayer)
//self.playerLayer.player?.volume = 1
self.playerLayer.player?.play()
}
}
我确定它有声音,因为我在使用 VLC 播放 mp4 时可以听到,我是不是错过了什么?
检查您的 phone 是否处于静音模式。如果它是无声的,请尝试将下面的代码添加到 viewDidLoad
:
Swift 2.3
try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, withOptions: [])
Swift 3
try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [])
Swift 4.2
try! AVAudioSession.sharedInstance().setCategory(.playback, options: [])
或者只是
try! AVAudioSession.sharedInstance().setCategory(.playback)
检查 iPhone 是否启用了静音模式,它是左上角 2 个按钮上方的按钮。允许静音模式的拨动开关。
对于 Swift 4.2,将以下行放入 viewDidLoad
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
}
catch {
print("Setting category to AVAudioSessionCategoryPlayback failed.")
}
对于Swift 5
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
}
catch {
print("Setting category to AVAudioSessionCategoryPlayback failed.")
}
我有多个视图控制器需要播放音频,即使设备设置为静音也是如此。因此,我没有更新每个 viewDidLoad
,而是将以下内容添加到 AppDelegate.swift 文件中的 didFinishLaunchingWithOptions
方法。
try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback)
备注:
- 进口
AVFoundation
- 我不需要任何其他错误捕获所以我只使用
try?
.
- 我支持到iOS 9.方刚的答案需要iOS 10.不过像我上面那样只使用单个参数,但是iOS 9.
- 测试 Swift 5
100% 正常工作,请尝试导入 AVKit,
导入 AVFoundation 并将下面的代码放在 viewDidLoad() 方法中。
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, mode: AVAudioSessionModeDefault, options: [])
}
catch {
print("Setting category to AVAudioSessionCategoryPlayback failed.")
}
我尝试了可接受的答案,但不幸的是它对我不起作用,失败并出现以下错误:
type 'String' has no member 'playback
然后我跳转到定义,发现它以String值作为参数,
如果你有同样的错误,请使用下面的代码
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, mode: AVAudioSessionModeDefault, options: [])
}
catch {
print("Setting category to AVAudioSessionCategoryPlayback failed.")
}
这是我播放 mp4 的所有代码,mp4 正在播放但没有声音
import UIKit
import AVFoundation
class ViewController: UIViewController {
@IBOutlet weak var containerView: UIView!
var playerLayer:AVPlayerLayer!
var player:AVPlayer!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let path = NSBundle.mainBundle().pathForResource("huoguo", ofType: "mp4")
let url = NSURL(fileURLWithPath: path!)
let asset = AVAsset(URL: url)
let playerItem = AVPlayerItem(asset: asset)
self.player = AVPlayer(playerItem: playerItem)
self.playerLayer = AVPlayerLayer(player: player)
self.playerLayer.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.width * 9 / 16)
self.containerView.layer.addSublayer(playerLayer)
//self.playerLayer.player?.volume = 1
self.playerLayer.player?.play()
}
}
我确定它有声音,因为我在使用 VLC 播放 mp4 时可以听到,我是不是错过了什么?
检查您的 phone 是否处于静音模式。如果它是无声的,请尝试将下面的代码添加到 viewDidLoad
:
Swift 2.3
try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, withOptions: [])
Swift 3
try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [])
Swift 4.2
try! AVAudioSession.sharedInstance().setCategory(.playback, options: [])
或者只是
try! AVAudioSession.sharedInstance().setCategory(.playback)
检查 iPhone 是否启用了静音模式,它是左上角 2 个按钮上方的按钮。允许静音模式的拨动开关。
对于 Swift 4.2,将以下行放入 viewDidLoad
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
}
catch {
print("Setting category to AVAudioSessionCategoryPlayback failed.")
}
对于Swift 5
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
}
catch {
print("Setting category to AVAudioSessionCategoryPlayback failed.")
}
我有多个视图控制器需要播放音频,即使设备设置为静音也是如此。因此,我没有更新每个 viewDidLoad
,而是将以下内容添加到 AppDelegate.swift 文件中的 didFinishLaunchingWithOptions
方法。
try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback)
备注:
- 进口
AVFoundation
- 我不需要任何其他错误捕获所以我只使用
try?
. - 我支持到iOS 9.方刚的答案需要iOS 10.不过像我上面那样只使用单个参数,但是iOS 9.
- 测试 Swift 5
100% 正常工作,请尝试导入 AVKit, 导入 AVFoundation 并将下面的代码放在 viewDidLoad() 方法中。
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, mode: AVAudioSessionModeDefault, options: [])
}
catch {
print("Setting category to AVAudioSessionCategoryPlayback failed.")
}
我尝试了可接受的答案,但不幸的是它对我不起作用,失败并出现以下错误:
type 'String' has no member 'playback
然后我跳转到定义,发现它以String值作为参数, 如果你有同样的错误,请使用下面的代码
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, mode: AVAudioSessionModeDefault, options: [])
}
catch {
print("Setting category to AVAudioSessionCategoryPlayback failed.")
}