播放视频时,avplayer没有声音

时间:2016-01-12 03:48:37

标签: 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()
}
}

我确定它有声音,因为我可以听到使用VLC播放mp4时,我是否错过了什么?

6 个答案:

答案 0 :(得分:66)

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

Swift 2.3

try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, withOptions: [])

Swift 3

try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [])

答案 1 :(得分:6)

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

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

答案 2 :(得分:2)

它可以100%工作,请尝试使用此导入AVKit, 导入AVFoundation并将以下代码放入viewDidLoad()方法中。

    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, mode: AVAudioSessionModeDefault, options: [])
    }
    catch {
        print("Setting category to AVAudioSessionCategoryPlayback failed.")
    }

答案 3 :(得分:1)

检查iPhone是否处于静音模式,它是左上方2个按钮上方的按钮。允许静音模式的拨动开关。

答案 4 :(得分:0)

即使设备设置为静音,我也有多个视图控制器需要播放音频。因此,我没有更新每个Connect => OpenRequest(GET) => SendRequest,而是在 AppDelegate.swift 文件中的viewDidLoad方法中添加了以下内容。

didFinishLaunchingWithOptions

注意:

  • 导入try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback)
  • 我不需要捕获其他任何错误,因此我只使用了AVFoundation
  • 我仅支持iOS9。Gang Fang的答案需要iOS10。但是,仅像我上面那样使用单个参数,就可以在iOS 9上正常工作。
  • 经过Swift 5测试

答案 5 :(得分:0)

我尝试了接受的答案,但不幸的是它对我不起作用,失败并出现以下错误:

类型 'String' 没有成员 'playback

然后我跳转到定义,发现它以String值作为参数, 如果您有相同的错误,请使用以下代码

    router.beforeEach(() => {
        $('.navbar-collapse').collapse('hide'); //Be sure to import jquery
    });