avplayer播放视频时没有声音

Posted

技术标签:

【中文标题】avplayer播放视频时没有声音【英文标题】:avplayer has no sounds when play video 【发布时间】:2016-01-12 03:48:37 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

自我注意...确保您尝试播放声音的视频中确实有声音。 FFS!谢谢:D【参考方案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.")
           

【讨论】:

【参考方案3】:

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

【讨论】:

我在这上面浪费了几个小时。我认为当您按下声音向上按钮并且 iOS 显示音量但由于静音模式而不会产生任何声音时会产生误导。【参考方案4】:

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

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

注意事项:

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

【讨论】:

【参考方案5】:

它的工作 100% 请试试这个 import AVKit , 导入 AVFoundation 并将下面的代码放入 viewDidLoad() 方法中。

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

【讨论】:

【参考方案6】:

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

type 'String' 没有成员 'playback

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

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

【讨论】:

以上是关于avplayer播放视频时没有声音的主要内容,如果未能解决你的问题,请参考以下文章

切换到下一个视图控制器后,AVPlayer 视频仍在播放

屏幕加载时AVPLayer显示黑屏

AVFoundation - 视频没有在 AVplayer 的 AVMutablecomposition 中播放

avplayer 不播放通过 IOS Objective-C 中的设备摄像头捕获的视频中的音频

AVPlayer 没有播放本地保存的视频文件

静音播放 Http Live Streaming 视频的 AVPlayer