web-dev-qa-db-ja.com

ビデオを再生すると、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を再生すると聞こえるので、音が聞こえると確信しています。何か聞き逃していませんか?

27
Xingou

スマートフォンがサイレントモードかどうかを確認します。サイレントの場合は、以下のコードをviewDidLoadに追加してください。

Swift 2.3

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

スウィフト3

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

Swift 4.2の場合、次の行をviewDidLoadに入れます

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

IPhoneのサイレントモードがオンになっているかどうかを確認します。これは、左上の2つのボタンの上にあるボタンです。サイレントモードを可能にするトグルスイッチ。

2

100%機能しているので、このインポートAVKitを試してAVFoundationをインポートし、viewDidLoad()メソッドのコードの下に配置してください。

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

デバイスがミュートに設定されている場合でも、オーディオを再生する必要がある複数のView Controllerがありました。したがって、すべてのviewDidLoadを更新する代わりに、AppDelegate.SwiftファイルのdidFinishLaunchingWithOptionsメソッドに以下を追加しました。

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

ノート:

  • インポートAVFoundation
  • 他のエラーキャッチは必要なかったので、try?
  • 私はiOS 9までサポートしています。GangFangの回答にはiOS 10が必要でした。ただし、上記のように単一のパラメーターを使用する場合のみ、iOS 9では問題なく動作しました。
  • Swift 5でテスト済み
0
Suragch