Определение состояния публикуемого аудио/видео: заглушено/не заглушено¶
В сборке IOS SDK 2.6.32 добавлена возможность получать при проигрывании потока события от публикующей 0стороны. Таким образом можно определить, заглушено ли аудио или видео в потоке: если клиент использует функцию muteAduio()
или muteVideo()
, подписчикам отправляется специальное событие. Чтобы получить это событие при проигрывании потока, необходимо переопределить функцию FPWCSApi2Stream.onStreamEvent
в Objective C приложении или WCSStream.onStreamEvent
в Swift приложении.
Пример для Objective C
code
[_remoteStream onStreamEvent:^(FPWCSApi2StreamEvent *streamEvent){
NSLog(@"No remote stream, %@", streamEvent.type);
if ([streamEvent.type isEqual:[FPWCSApi2Model streamEventTypeToString:kFPWCSStreamEventTypeAudioMuted]]) {
[_remoteControl onAudioMute:true];
}
if ([streamEvent.type isEqual:[FPWCSApi2Model streamEventTypeToString:kFPWCSStreamEventTypeAudioUnmuted]]) {
[_remoteControl onAudioMute:false];
}
if ([streamEvent.type isEqual:[FPWCSApi2Model streamEventTypeToString:kFPWCSStreamEventTypeVideoMuted]]) {
[_remoteControl onVideoMute:true];
}
if ([streamEvent.type isEqual:[FPWCSApi2Model streamEventTypeToString:kFPWCSStreamEventTypeVideoUnmuted]]) {
[_remoteControl onVideoMute:false];
}
}];
Пример для Swift
code
playStream?.onStreamEvent({streamEvent in
if (streamEvent?.type == FPWCSApi2Model.streamEventType(toString: .fpwcsStreamEventTypeAudioMuted)) {
self.remoteViewController?.onAudioMute(true);
}
if (streamEvent?.type == FPWCSApi2Model.streamEventType(toString: .fpwcsStreamEventTypeAudioUnmuted)) {
self.remoteViewController?.onAudioMute(false);
}
if (streamEvent?.type == FPWCSApi2Model.streamEventType(toString: .fpwcsStreamEventTypeVideoMuted)) {
self.remoteViewController?.onVideoMute(true);
}
if (streamEvent?.type == FPWCSApi2Model.streamEventType(toString: .fpwcsStreamEventTypeVideoUnmuted)) {
self.remoteViewController?.onVideoMute(false);
}
});
Получение состояния потока при подключении к потоку¶
При подключении подписчика к потоку, состояние потока можно получить в обработчике события StreamStatusPlaying
, используя методы Stream.getAudioState()
и Stream.getVideoState()
Пример для Objective C
code
[_remoteStream on:kFPWCSStreamStatusPlaying callback:^(FPWCSApi2Stream *stream){
[self changeStreamStatus:stream];
[self onStarted];
_useLoudSpeaker.control.userInteractionEnabled = YES;
[_remoteControl onAudioMute:[stream getAudioState].muted];
[_remoteControl onVideoMute:[stream getVideoState].muted];
}];
Пример для Swift
code
@IBAction func playPressed(_ sender: Any) {
changeViewState(playButton,false)
if (playButton.title(for: .normal) == "PLAY") {
let options = FPWCSApi2StreamOptions()
options.name = playName.text;
options.display = remoteDisplay.videoView;
options.constraints = remoteMediaConstrains;
options.transport = tcpTransport.isOn ? kFPWCSTransport.fpwcsTransportTCP : kFPWCSTransport.fpwcsTransportUDP;
do {
playStream = try session!.createStream(options)
} catch {
print(error);
}
playStream?.on(.fpwcsStreamStatusPlaying, {rStream in
self.changeStreamStatus(rStream!)
self.onPlaying(rStream!);
});
...
}
}
...
fileprivate func onPlaying(_ stream:FPWCSApi2Stream) {
playButton.setTitle("STOP", for:.normal)
changeViewState(loudSpeaker, true)
changeViewState(playButton, true)
self.remoteViewController!.onAudioMute(stream.getAudioState()?.muted ?? false)
self.remoteViewController!.onVideoMute(stream.getVideoState()?.muted ?? false)
}