web-dev-qa-db-ja.com

AVPlayerのオーディオ再生をオフにしますか?

AVPlayerItemのAVPlayerがあります。私が欲しいのは、AVPlayerのオーディオ再生をオフにすることです。ビデオだけを再生したい。

誰かが私を助けてくれますか?ありがとうございました!

    self.avPlayerItem = [AVPlayerItem playerItemWithURL:self.videoUrl];
    self.avPlayer = [AVPlayer playerWithPlayerItem:self.avPlayerItem];
    [self.avPlayer play];
    self.avPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;


    self.avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:self.avPlayer];
    self.avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playerItemDidPlayToEndTime:)
                                                 name:AVPlayerItemDidPlayToEndTimeNotification
                                               object:self.avPlayerItem];


    CGRect screenRect = [[UIScreen mainScreen] bounds];

    self.avPlayerLayer.frame = CGRectMake(0, 0, screenRect.size.width , screenRect.size.height );
    [self.view.layer insertSublayer:self.avPlayerLayer atIndex:0];
20
Gaby Fitcal

AVPlayerにはオプションがあります

@property (nonatomic, getter=isMuted) BOOL muted NS_AVAILABLE(10_7, 7_0);

あなたは書ける

- (void) muteSound:(BOOL)mute
{
    self.avPlayer.muted = mute;
}

そして、それを使いたい

- (void) startPlayingVideo
{

    [self muteSound:YES];

    //other code

} 
20
Joe Hallenbeck

@Tung Famの答えが示唆するように、あなたのアプリでこれを簡単に行うことでビデオをミュートすることができます-

_player.isMuted = true_

すべてのユースケースの処理:

上記のコードを使用してビデオをミュートで実行できますが、問題は、単に_isMuted = true_を使用した場合(たとえば、ビデオプレビュー)、機能しますが、アプリはオペレーティングシステムからAVAudioSessionを「ハイジャック」します、つまり、ユーザーが音楽を聴いている場合(spotifyまたはApple music))、ユーザーの音楽が中断されます。これは、アプリのデフォルト設定がAVAudioSessionからAVAudioSessionCategorySoloAmbientであるためですつまり、アプリは、ビデオの再生を開始するとすぐに、バックグラウンドで実行されているすべてのオーディオセッションを常にミュートまたはミュート解除します。 。これは、ユーザーの満足度があまり高くなく、混乱を招く可能性があります。

ユーザーがバックグラウンドで曲を再生している間、ビデオをプレビューとしてミュートして表示することができます。ユーザーがアプリのビデオを全画面表示にすると、バックグラウンドオーディオは本質的にアプリがAVAudioSessionを引き継ぐ「一時停止」または「中断」される必要があります。そして、ビデオの再生が完了したら、「中断された」バックグラウンドミュージック(例:Spotify、Apple Musicなど))を再開します。以下の手順は、Twitterのアプリがビデオとバックグラウンドを処理する方法を正確に実現します音楽-

  1. didFinishLaunchingWithOptionsメソッドのAppDelegateで、アプリがバックグラウンドミュージックを中断していないことを確認します。これで、動画が「ミュート」で実行されるため、単純にmixWithOthersを実行できます。

    _ do{
      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [.mixWithOthers])
      try AVAudioSession.sharedInstance().setActive(true)
    }catch{//some meaningful exception handling}
    _
  2. アプリがビデオのフルスクリーン(ミュート解除/サウンドあり)の再生を開始したら、バックグラウンドミュージックを中断する必要があります。そのため、player.play()の前に、次のようにAVAudioSessionを再度設定できます

    _do{
         try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [])
         try AVAudioSession.sharedInstance().setActive(true)
     }catch{//some meaningful exception handling}
    _

    これにより、基本的に進行中のバックグラウンドオーディオが一時停止/中断され、ビデオを音声付きで再生できます。

  3. ビデオがサウンドで再生されたら、中断されたオーディオセッションを再開できることをAVAudioSessionに通知する必要があります(つまり、Spotify、Apple音楽、マップナビゲーションの指示など)。 。これを行うには、ビデオの再生が停止したら、これを行うことができます-

    _do{
          try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [.mixWithOthers])
          try AVAudioSession.sharedInstance().setActive(false, with: AVAudioSessionSetActiveOptions.notifyOthersOnDeactivation)
       }catch{//some meaningful exception handling}
    _

AVAudioSessionおよび here's のドキュメントを処理する方法で利用できるオプションは他にもたくさんあります。そして here は、さまざまな種類のアプリにAVAudioSessionを使用することに関するAppleのガイドラインです。


これは、AVAudioSessionの使用方法に関する非常に基本的な説明にすぎませんが、アプリの機能によっては、KVO、AppDelegateメソッド(アプリがバックグラウンドに移行する、またはフォアグラウンドに移行するなど)を使用してAVAudioSessionを設定する必要がある場合があります適切に。さらに注意が必要なのは、AVAudioSessionのすべてのオプションを実際に試してみる必要があることです。これは、思ったとおりに機能しない可能性があり、少し厄介なものになる可能性があるためです。さらに注意すべき点は、Appleのドキュメントと、ここSOあちらこちらにあるいくつかの質問)を除いて、AVAudioSessionについて詳しく説明しているオンラインはほとんどありませんでした。オーディオ/ビデオを扱う場合は、アップルのプレイブック「 アプリの種類別のオーディオガイドライン 」に基づいてAVAudioSessionを適切に処理することを強くお勧めします。安定した。

17
Annjawn

誰かが探している場合Swift 4

player.isMuted = true // To mute the sound
player.isMuted = false // To un-mute the sound

補足:ビデオをミュートしても、ビデオサウンドはリセットされません。これは単なる常識的なミュート機能として機能します。

5
Tung Fam

これはAppDelegate didFinishLaunchingWithOptionsで追加できます。ビデオが他のアプリで現在再生されているサウンドを停止させたくない場合(ビデオプレーヤーがミュートに設定されている場合でも)

func setAudioMix(){
    do{
        try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, mode: AVAudioSession.Mode.default, options: [.mixWithOthers])
        try AVAudioSession.sharedInstance().setActive(true)
    }catch{
        print("something went wrong")
    }
}
0
glemoulant

次のコードをviewDidLoad()に実装することで、オーディオをミュートできます。

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[self myAssetURL] 
options:nil];
NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio]; 

// Mute all the audio 
tracksNSMutableArray *allAudioParams = [NSMutableArray array];

for (AVAssetTrack *track in audioTracks) {    
AVMutableAudioMixInputParameters *audioInputParams 
=[AVMutableAudioMixInputParameters audioMixInputParameters];   

[audioInputParams setVolume:0.0 atTime:kCMTimeZero];  

[audioInputParams setTrackID:[track trackID]];    [allAudioParams 
addObject:audioInputParams];}

AVMutableAudioMix *audioZeroMix = 
[AVMutableAudioMix audioMix];
[audioZeroMix setInputParameters:allAudioParams];

以下のリンクが役立つ場合があります。

  1. https://goo.gl/WYJNUF
  2. https://goo.gl/epHNGs