webrtc获取p2p通讯过程中相关数据
首先添加如下方法:
private final Timer statsTimer = new Timer();private static final ExecutorService executorState = Executors.newSingleThreadExecutor();private void enableStatsEvents(boolean enable, int periodMs) {if (enable) {try {statsTimer.schedule(new TimerTask() {@Overridepublic void run() {executorState.execute(() -> getStats());}}, 0, periodMs);} catch (Exception e) {Log.e(TAG, "Can not schedule statistics timer", e);}} else {statsTimer.cancel();}}private void getStats() {if (localPeer == null ) {return;}boolean success = localPeer.getStats(new StatsObserver() {@Overridepublic void onComplete(final StatsReport[] reports) {StringBuilder encoderStat = new StringBuilder(128);StringBuilder bweStat = new StringBuilder();StringBuilder connectionStat = new StringBuilder();StringBuilder videoSendStat = new StringBuilder();StringBuilder videoRecvStat = new StringBuilder();String fps = null;String targetBitrate = null;String actualBitrate = null;for (StatsReport report : reports) {if (report.type.equals("ssrc") && report.id.contains("ssrc") && report.id.contains("send")) {// Send video statistics.Map reportMap = getReportMap(report);String trackId = reportMap.get("googTrackId");if (trackId != null && trackId.contains("Videoo_Track_ID")) {fps = reportMap.get("googFrameRateSent");videoSendStat.append(report.id).append("\n");for (StatsReport.Value value : report.values) {String name = value.name.replace("goog", "");videoSendStat.append(name).append("=").append(value.value).append("\n");}}} else if (report.type.equals("ssrc") && report.id.contains("ssrc")&& report.id.contains("recv")) {// Receive video statistics.Map reportMap = getReportMap(report);// Check if this stat is for video track.String frameWidth = reportMap.get("googFrameWidthReceived");if (frameWidth != null) {videoRecvStat.append(report.id).append("\n");for (StatsReport.Value value : report.values) {String name = value.name.replace("goog", "");videoRecvStat.append(name).append("=").append(value.value).append("\n");}}} else if (report.id.equals("bweforvideo")) {// BWE statistics.Map reportMap = getReportMap(report);targetBitrate = reportMap.get("googTargetEncBitrate");actualBitrate = reportMap.get("googActualEncBitrate");bweStat.append(report.id).append("\n");for (StatsReport.Value value : report.values) {String name = value.name.replace("goog", "").replace("Available", "");bweStat.append(name).append("=").append(value.value).append("\n");}} else if (report.type.equals("googCandidatePair")) {// Connection statistics.Map reportMap = getReportMap(report);String activeConnection = reportMap.get("googActiveConnection");if (activeConnection != null && activeConnection.equals("true")) {connectionStat.append(report.id).append("\n");for (StatsReport.Value value : report.values) {String name = value.name.replace("goog", "");connectionStat.append(name).append("=").append(value.value).append("\n");}}}}StringBuilder sb=new StringBuilder();sb.append(connectionStat.toString());sb.append("/n");sb.append(videoSendStat.toString());sb.append("/n");sb.append("开始获取接收的视频数据=");sb.append("/n");sb.append(videoRecvStat.toString());
// Log.e("haha","获取到的数据="+sb.toString());}}, null);if (!success) {Log.e(TAG, "getStats() returns false!");}}private Map getReportMap(StatsReport report) {Map reportMap = new HashMap<>();for (StatsReport.Value value : report.values) {reportMap.put(value.name, value.value);}return reportMap;} 然后在p2p连接成功后调用如下方法即可
enableStatsEvents(true,1000);
所调用位置在
org.webrtc.PeerConnection.Observer接口的onConnectionChange方法中,具体调用位置参考如下:
@Overridepublic void onConnectionChange(PeerConnection.PeerConnectionState newState) {if (newState == PeerConnection.PeerConnectionState.CONNECTED) {Log.e("haha","onConnectionChange 连接成功");enableStatsEvents(true,1000);}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
