ios 播放视频时avplayer没有声音

wa7juj8i  于 2022-12-27  发布在  iOS
关注(0)|答案(6)|浏览(319)

这里是我所有的代码播放一个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()
}
}

我敢肯定它有声音,因为我可以听到当播放的mp4使用VLC,我错过了什么?

cfh9epnr

cfh9epnr1#

检查您的手机是否处于静音模式。如果是静音模式,请尝试将下面的代码添加到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)
rpppsulh

rpppsulh2#

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

ffx8fchx3#

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

vdzxcuhz

vdzxcuhz4#

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

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

注:

  • 导入AVFoundation
  • 我不需要任何其他错误捕获,所以我只使用try?
  • 我支持iOS9。方刚的答案需要iOS10。不过,我只使用了上面提到的单个参数,在iOS9上运行良好。
  • 使用Swift 5进行测试
agxfikkp

agxfikkp5#

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

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

ldfqzlk86#

我尝试接受的答案,但不幸的是它不为我工作,失败与以下错误:

类型“String”没有成员“playback”

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

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

相关问题