Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WebRTC SDK iOS RTCIceCandidatePairStats_Ios_Webrtc - Fatal编程技术网

WebRTC SDK iOS RTCIceCandidatePairStats

WebRTC SDK iOS RTCIceCandidatePairStats,ios,webrtc,Ios,Webrtc,我正在尝试使用WebRTC iOS SDK记录RTCIceCandidatePairStats。我可以访问RTCLegacyStatsReport。是否有人知道如何在iOS上获取此信息: 是的,就是这些。不知道为什么它们被称为RTCLeage,可能是因为RTC不再使用它们了 不管怎样,这些都是正确的统计数据。他们将为您提供所需的所有信息(比特率/帧大小/cpu%/等) 只是为了理智起见,使用 - (void)statsForTrack:(nullable RTCMediaStreamTrack

我正在尝试使用WebRTC iOS SDK记录RTCIceCandidatePairStats。我可以访问RTCLegacyStatsReport。是否有人知道如何在iOS上获取此信息:
是的,就是这些。不知道为什么它们被称为RTCLeage,可能是因为RTC不再使用它们了

不管怎样,这些都是正确的统计数据。他们将为您提供所需的所有信息(比特率/帧大小/cpu%/等)

只是为了理智起见,使用

- (void)statsForTrack:(nullable RTCMediaStreamTrack *)mediaStreamTrack
     statsOutputLevel:(RTCStatsOutputLevel)statsOutputLevel
    completionHandler:(nullable void (^)(NSArray<RTCLegacyStatsReport *> *stats))completionHandler;

为了给我们提供准确的服务质量

是的,就是这些。不知道为什么它们被称为RTCLeage,可能是因为RTC不再使用它们了

yea John was right and we use the same for WebRTC stats you can use standard or debug stats level based on your requirement. 

\\ here connection is your - RTCPeerConnection
\\ track is your current video track
\\

\\ a small example of how we are using it 

func updateStats() {
    for stream in streams.values {
        guard stream.videoTracks.first!.isEnabled else { continue }
        let track = stream.videoTracks.first!
        connection.stats(for: track, statsOutputLevel: RTCStatsOutputLevel.standard) { [weak self] reports in
            guard let self = self else { return }
            guard reports.count == 3 else { return }
            guard reports[2].reportId.hasSuffix("_recv") else { return }

            let data = reports[2].values
            guard let trackId = data["googTrackId"] else { return }

            self.streamStats[trackId]?.previousStats = nil
            let stats = StreamStats(data: data, previousStats: self.streamStats[trackId])
            self.delegate?.client(client: self, statsUpdated: stats, forTrackId: trackId)
            self.streamStats[trackId] = stats
        }
    }
}
不管怎样,这些都是正确的统计数据。他们将为您提供所需的所有信息(比特率/帧大小/cpu%/等)

只是为了理智起见,使用

- (void)statsForTrack:(nullable RTCMediaStreamTrack *)mediaStreamTrack
     statsOutputLevel:(RTCStatsOutputLevel)statsOutputLevel
    completionHandler:(nullable void (^)(NSArray<RTCLegacyStatsReport *> *stats))completionHandler;

为我们提供准确的QOS

,这是我们正在使用的功能。我被要求跟踪可用的BoingByrate。也许它在iOS上有不同的名称?这就是我们正在使用的函数。我被要求跟踪可用的BoingByrate。也许它在iOS上有不同的名字?
yea John was right and we use the same for WebRTC stats you can use standard or debug stats level based on your requirement. 

\\ here connection is your - RTCPeerConnection
\\ track is your current video track
\\

\\ a small example of how we are using it 

func updateStats() {
    for stream in streams.values {
        guard stream.videoTracks.first!.isEnabled else { continue }
        let track = stream.videoTracks.first!
        connection.stats(for: track, statsOutputLevel: RTCStatsOutputLevel.standard) { [weak self] reports in
            guard let self = self else { return }
            guard reports.count == 3 else { return }
            guard reports[2].reportId.hasSuffix("_recv") else { return }

            let data = reports[2].values
            guard let trackId = data["googTrackId"] else { return }

            self.streamStats[trackId]?.previousStats = nil
            let stats = StreamStats(data: data, previousStats: self.streamStats[trackId])
            self.delegate?.client(client: self, statsUpdated: stats, forTrackId: trackId)
            self.streamStats[trackId] = stats
        }
    }
}