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];
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
}
@Tung Famの答えが示唆するように、あなたのアプリでこれを簡単に行うことでビデオをミュートすることができます-
_player.isMuted = true
_
すべてのユースケースの処理:
上記のコードを使用してビデオをミュートで実行できますが、問題は、単に_isMuted = true
_を使用した場合(たとえば、ビデオプレビュー)、機能しますが、アプリはオペレーティングシステムからAVAudioSession
を「ハイジャック」します、つまり、ユーザーが音楽を聴いている場合(spotifyまたはApple music))、ユーザーの音楽が中断されます。これは、アプリのデフォルト設定がAVAudioSession
からAVAudioSessionCategorySoloAmbient
であるためですつまり、アプリは、ビデオの再生を開始するとすぐに、バックグラウンドで実行されているすべてのオーディオセッションを常にミュートまたはミュート解除します。 。これは、ユーザーの満足度があまり高くなく、混乱を招く可能性があります。
ユーザーがバックグラウンドで曲を再生している間、ビデオをプレビューとしてミュートして表示することができます。ユーザーがアプリのビデオを全画面表示にすると、バックグラウンドオーディオは本質的にアプリがAVAudioSession
を引き継ぐ「一時停止」または「中断」される必要があります。そして、ビデオの再生が完了したら、「中断された」バックグラウンドミュージック(例:Spotify、Apple Musicなど))を再開します。以下の手順は、Twitterのアプリがビデオとバックグラウンドを処理する方法を正確に実現します音楽-
didFinishLaunchingWithOptions
メソッドのAppDelegateで、アプリがバックグラウンドミュージックを中断していないことを確認します。これで、動画が「ミュート」で実行されるため、単純にmixWithOthers
を実行できます。
_ do{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [.mixWithOthers])
try AVAudioSession.sharedInstance().setActive(true)
}catch{//some meaningful exception handling}
_
アプリがビデオのフルスクリーン(ミュート解除/サウンドあり)の再生を開始したら、バックグラウンドミュージックを中断する必要があります。そのため、player.play()
の前に、次のようにAVAudioSession
を再度設定できます
_do{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [])
try AVAudioSession.sharedInstance().setActive(true)
}catch{//some meaningful exception handling}
_
これにより、基本的に進行中のバックグラウンドオーディオが一時停止/中断され、ビデオを音声付きで再生できます。
ビデオがサウンドで再生されたら、中断されたオーディオセッションを再開できることを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
を適切に処理することを強くお勧めします。安定した。
誰かが探している場合Swift 4:
player.isMuted = true // To mute the sound
player.isMuted = false // To un-mute the sound
補足:ビデオをミュートしても、ビデオサウンドはリセットされません。これは単なる常識的なミュート機能として機能します。
これは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")
}
}
次のコードを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];
以下のリンクが役立つ場合があります。