播放视频时,avplayer没有声音

Xin*_*gou 25 ios avplayer

这是我的所有代码播放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()
}
}
Run Code Online (Sandbox Code Playgroud)

我确定它有声音,因为我可以听到使用VLC播放mp4时,我是否想念一些东西?

vie*_* vu 71

检查手机是否处于静音模式.如果它是静音,请尝试将以下代码添加到viewDidLoad:

斯威夫特2.3

try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, withOptions: [])
Run Code Online (Sandbox Code Playgroud)

斯威夫特3

try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [])
Run Code Online (Sandbox Code Playgroud)

  • 请注意自己...确保您尝试播放声音的视频实际上有声音.FFS!感谢:D (3认同)
  • 好吧,我的手机没有静音,但 avPlayer 中的音频没有声音。这与静音模式无关。我不想绕过用户将电话静音的选择。我只想让 avPlayer 发出声音。任何其他建议。 (2认同)

Kin*_*ell 10

检查 iPhone 是否启用了静音模式,它是左上角 2 个按钮上方的一个按钮。允许静音模式的拨动开关。

  • 我为此浪费了几个小时。我认为当你按下声音增大按钮时,iOS 会显示声音级别,但由于静音模式而不会发出任何声音,这是一种误导。 (2认同)

Gan*_*ang 10

对于Swift 4.2,将以下行放入 viewDidLoad

do {
    try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
}
catch {
    print("Setting category to AVAudioSessionCategoryPlayback failed.")
}
Run Code Online (Sandbox Code Playgroud)


Sur*_*gch 6

我有多个视图控制器,即使设备设置为静音,也需要播放音频。因此,我没有更新每个单个viewDidLoad,而是将以下内容添加到AppDelegate.swiftdidFinishLaunchingWithOptions文件中的方法中。

try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback)
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 进口AVFoundation
  • 我不需要任何其他错误捕获,所以我只使用了try?.
  • 我支持 iOS 9。方刚的回答需要 iOS 10。不过,仅使用我上面所做的单个参数,对于 iOS 9 来说效果很好。
  • 使用 Swift 5 进行测试