web-dev-qa-db-fra.com

avplayer n'a aucun son lors de la lecture de la vidéo

voici tous mes codes pour jouer un mp4, le mp4 joue mais aucun son ne sort

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()
}
}

je suis sûr qu'il a des sons, car je peux entendre lorsque je joue sur le mp4 en utilisant VLC, ai-je raté quelque chose?

27
Xingou

Vérifiez que votre téléphone est en mode silencieux ou non. S'il est silencieux, essayez d'ajouter le code ci-dessous à viewDidLoad:

Swift 2.3

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

Swift 3

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

Pour Swift 4.2, mettez les lignes suivantes dans viewDidLoad

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

Vérifiez si l'iPhone a le mode silencieux activé, c'est un bouton au-dessus des 2 boutons en haut à gauche. Un interrupteur à bascule qui permet le mode silencieux.

2
Kingsley Mitchell

Son fonctionnement à 100%, essayez cet import AVKit, importez AVFoundation et mettez le code ci-dessous dans la méthode viewDidLoad ().

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

J'avais plusieurs contrôleurs de vue qui devaient lire l'audio même lorsque l'appareil était réglé sur muet. Ainsi, au lieu de mettre à jour chaque viewDidLoad, j'ai ajouté ce qui suit à la méthode didFinishLaunchingWithOptions dans le fichier AppDelegate.Swift.

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

Remarques:

  • importer AVFoundation
  • Je n'ai eu besoin d'aucune autre erreur pour attraper, donc j'ai juste utilisé try?.
  • Je soutiens jusqu'à iOS 9. La réponse de Gang Fang exigeait iOS 10. Cependant, en utilisant le seul paramètre comme je l'ai fait ci-dessus, cela a bien fonctionné pour iOS 9.
  • Testé avec Swift 5
0
Suragch