avplayer 播放视频时没有声音

问题描述 投票:0回答:6

这是我播放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 时可以听到声音,我错过了什么吗?

ios avplayer
6个回答
114
投票

检查您的手机是否处于静音模式。如果没有声音,请尝试将以下代码添加到

viewDidLoad

斯威夫特2.3

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

斯威夫特3

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

斯威夫特 4.2

try! AVAudioSession.sharedInstance().setCategory(.playback, options: [])

或者只是

try! AVAudioSession.sharedInstance().setCategory(.playback)

32
投票

对于 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.")
           }

12
投票

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

https://www.kproapps.com


6
投票

我有多个视图控制器,即使设备设置为静音,也需要播放音频。因此,我没有更新每个

viewDidLoad
,而是将以下内容添加到
AppDelegate.swift
文件中的 didFinishLaunchingWithOptions 方法中。

try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback)

备注:

  • 导入
    AVFoundation
  • 我不需要任何其他错误捕获,所以我只使用了
    try?
  • 我支持iOS 9。方刚的回答需要iOS 10。不过,像我上面那样只使用单个参数,在iOS 9上工作得很好。
  • 使用 Swift 5 进行测试

4
投票

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

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

0
投票

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

类型'String'没有成员'回放

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

        do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, mode: AVAudioSessionModeDefault, options: [])
        }
        catch {
            print("Setting category to AVAudioSessionCategoryPlayback failed.")
        }
© www.soinside.com 2019 - 2024. All rights reserved.