use of com.att.aro.core.bestpractice.pojo.VideoNetworkComparisonResult in project VideoOptimzer by attdevsupport.
the class VideoResultSummary method populateSummary.
private void populateSummary(AROTraceData trace) {
for (AbstractBestPracticeResult bpResult : trace.getBestPracticeResults()) {
if (bpResult.getClass().getName().contains("AROServiceImpl")) {
continue;
}
BestPracticeType bpType = bpResult.getBestPracticeType();
switch(bpType) {
case VIDEO_STALL:
VideoStallResult result = (VideoStallResult) bpResult;
stalls = result.getStallResult();
break;
case NETWORK_COMPARISON:
VideoNetworkComparisonResult ntkResult = (VideoNetworkComparisonResult) bpResult;
ntkComparison = ntkResult.getAvgKbps();
break;
case TCP_CONNECTION:
VideoTcpConnectionResult tcpResult = (VideoTcpConnectionResult) bpResult;
tcpConnection = tcpResult.getTcpConnections();
break;
case BUFFER_OCCUPANCY:
BufferOccupancyResult bufferResult = (BufferOccupancyResult) bpResult;
bufferOccupancy = bufferResult.getMaxBuffer();
populateBufferResult(bufferResult);
break;
case CHUNK_SIZE:
VideoChunkSizeResult segmentSizeResult = (VideoChunkSizeResult) bpResult;
segmentSize = segmentSizeResult.getSegmentSize();
segmentCount = segmentSizeResult.getSegmentCount();
break;
case CHUNK_PACING:
VideoChunkPacingResult segmentPacingResult = (VideoChunkPacingResult) bpResult;
segmentPacing = segmentPacingResult.getChunkPacing();
break;
case VIDEO_REDUNDANCY:
VideoRedundancyResult redundancyResult = (VideoRedundancyResult) bpResult;
duplicate = redundancyResult.getCountDuplicate();
redundancy = redundancyResult.getRedundantPercentage();
break;
case STARTUP_DELAY:
VideoStartUpDelayResult startupDelayResult = (VideoStartUpDelayResult) bpResult;
startUpDelay = startupDelayResult.getStartUpDelay();
break;
case VIDEO_CONCURRENT_SESSION:
VideoConcurrentSessionResult concurrentSessionResult = (VideoConcurrentSessionResult) bpResult;
concurrentSessions = concurrentSessionResult.getMaxConcurrentSessionCount();
break;
default:
break;
}
}
List<Session> allSessions = trace.getAnalyzerResult().getSessionlist();
Map<InetAddress, List<Session>> ipSessionsMap = new HashMap<InetAddress, List<Session>>();
for (Session session : allSessions) {
InetAddress ipAddress = session.getRemoteIP();
if (ipSessionsMap.containsKey(ipAddress)) {
ipSessionsMap.get(ipAddress).add(session);
} else {
List<Session> sess = new ArrayList<Session>();
sess.add(session);
ipSessionsMap.put(ipAddress, sess);
}
}
ipAddress = ipSessionsMap.keySet().size();
ipSessions = allSessions.size();
StreamingVideoData streamingVideoData;
if ((streamingVideoData = trace.getAnalyzerResult().getStreamingVideoData()) == null) {
return;
}
Collection<VideoStream> selectedVideoStreams = streamingVideoData.getVideoStreams();
movieMBytes = calculateMBytes(selectedVideoStreams, false);
totalMBytes = calculateMBytes(selectedVideoStreams, true);
if (trace.getAnalyzerResult().getStreamingVideoData().getStreamingVideoCompiled().getChunkPlayTimeList().isEmpty()) {
startupDelayStatus = false;
} else {
startupDelayStatus = true;
}
}
use of com.att.aro.core.bestpractice.pojo.VideoNetworkComparisonResult in project VideoOptimzer by attdevsupport.
the class VideoNetworkComparisonImpl method runTest.
@Override
public AbstractBestPracticeResult runTest(PacketAnalyzerResult tracedata) {
BPResultType bpResultType = BPResultType.SELF_TEST;
double avgKbps = 0.0;
double avgBitRate = 0.0;
double summaryBitRate = 0.0;
VideoNetworkComparisonResult result = new VideoNetworkComparisonResult();
init(result);
SortedMap<Integer, SegmentComparison> qualityMap = new TreeMap<>();
if ((streamingVideoData = tracedata.getStreamingVideoData()) != null && (videoStreamCollection = streamingVideoData.getVideoStreamMap()) != null && MapUtils.isNotEmpty(videoStreamCollection)) {
selectedCount = streamingVideoData.getSelectedManifestCount();
invalidCount = streamingVideoData.getInvalidManifestCount();
List<VideoEvent> filteredVideoSegment = filterVideoSegment(streamingVideoData);
if (selectedCount == 0) {
if (invalidCount == videoStreamCollection.size()) {
result.setResultText(invalidManifestsFound);
} else if (invalidCount > 0) {
result.setResultText(noManifestsSelectedMixed);
} else {
result.setResultText(noManifestsSelected);
}
bpResultType = BPResultType.CONFIG_REQUIRED;
result.setResultExcelText(BPResultType.CONFIG_REQUIRED.getDescription());
result.setSelfTest(false);
} else if (selectedCount > 1) {
bpResultType = BPResultType.CONFIG_REQUIRED;
result.setResultText(multipleManifestsSelected);
result.setResultExcelText(BPResultType.CONFIG_REQUIRED.getDescription());
result.setSelfTest(false);
} else {
SegmentComparison segmentComparison;
for (VideoStream videoStream : videoStreamCollection.values()) {
if (videoStream.isSelected() && MapUtils.isNotEmpty(videoStream.getVideoEventMap())) {
for (VideoEvent videoEvent : videoStream.getVideoEventMap().values()) {
if (videoEvent.isNormalSegment() && videoEvent.isSelected()) {
Integer track = StringParse.stringToDouble(videoEvent.getQuality(), 0).intValue();
double endTS = videoEvent.getEndTS();
double startTS = videoEvent.getStartTS();
double durationInMilliseconds = endTS - startTS;
double throughput = 0.0;
if (durationInMilliseconds > 0) {
throughput = (videoEvent.getTotalBytes() * 8) / durationInMilliseconds;
}
if ((segmentComparison = qualityMap.get(track)) != null) {
int count = segmentComparison.getCount();
segmentComparison.setCount(++count);
segmentComparison.getCalculatedThroughputList().add(throughput);
} else {
List<Double> throughputs = new ArrayList<Double>();
throughputs.add(throughput);
segmentComparison = new SegmentComparison(videoEvent.getManifest().getVideoName(), // declaredBitrate (kbps)
1, // declaredBitrate (kbps)
track, // declaredBitrate (kbps)
videoEvent.getChildManifest().getBandwidth() / 1000.0, throughputs);
qualityMap.put(track, segmentComparison);
}
}
}
}
}
result.setResults(qualityMap);
avgBitRate = getAvgBitRate(summaryBitRate, filteredVideoSegment);
avgKbps = getAvgThroughput(tracedata);
result.setAvgBitRate(avgBitRate);
result.setAvgKbps(avgKbps);
result.setSelfTest(true);
bpResultType = BPResultType.SELF_TEST;
result.setResultText(MessageFormat.format(textResults, avgKbps, avgBitRate));
result.setResultExcelText(MessageFormat.format(textExcelResults, BPResultType.SELF_TEST.getDescription(), avgKbps, avgBitRate));
}
} else {
result.setResultText(noData);
result.setResultExcelText(BPResultType.NO_DATA.getDescription());
bpResultType = BPResultType.NO_DATA;
}
result.setResultType(bpResultType);
return result;
}
use of com.att.aro.core.bestpractice.pojo.VideoNetworkComparisonResult in project VideoOptimzer by attdevsupport.
the class VideoBestPractices method analyze.
public AROTraceData analyze(AROTraceData traceDataresult) {
PacketAnalyzerResult result = null;
if (null == traceDataresult) {
return null;
}
result = traceDataresult.getAnalyzerResult();
if (result == null) {
return null;
}
VideoStallResult videoStallResult = null;
VideoStartUpDelayResult videoStartUpDelayResult = null;
BufferOccupancyResult bufferOccupancyResult = null;
VideoNetworkComparisonResult videoNetworkComparisonResult = null;
VideoTcpConnectionResult videoTcpConnectionResult = null;
VideoChunkSizeResult videoChunkSizeResult = null;
VideoChunkPacingResult videoChunkPacingResult = null;
VideoRedundancyResult videoRedundancyResult = null;
VideoConcurrentSessionResult videoConcurrentSessionResult = null;
VideoVariableBitrateResult videoVariableBitrateResult = null;
VideoAdaptiveBitrateLadderResult videoSegmentQualityResult = null;
VideoResolutionQualityResult videoResolutionQualityResult = null;
AudioStreamResult videoSeparateAudioResult = null;
List<BestPracticeType> requests = BestPracticeType.getByCategory(Category.VIDEO);
List<AbstractBestPracticeResult> bpResults = traceDataresult.getBestPracticeResults();
List<AbstractBestPracticeResult> videoBestPracticeResults = aroService.analyze(result, requests);
for (AbstractBestPracticeResult videoBPResult : videoBestPracticeResults) {
BestPracticeType bpType = videoBPResult.getBestPracticeType();
switch(bpType) {
case VIDEO_STALL:
videoStallResult = (VideoStallResult) videoBPResult;
break;
case STARTUP_DELAY:
videoStartUpDelayResult = (VideoStartUpDelayResult) videoBPResult;
break;
case BUFFER_OCCUPANCY:
bufferOccupancyResult = (BufferOccupancyResult) videoBPResult;
break;
case NETWORK_COMPARISON:
videoNetworkComparisonResult = (VideoNetworkComparisonResult) videoBPResult;
break;
case TCP_CONNECTION:
videoTcpConnectionResult = (VideoTcpConnectionResult) videoBPResult;
break;
case CHUNK_SIZE:
videoChunkSizeResult = (VideoChunkSizeResult) videoBPResult;
break;
case CHUNK_PACING:
videoChunkPacingResult = (VideoChunkPacingResult) videoBPResult;
break;
case VIDEO_REDUNDANCY:
videoRedundancyResult = (VideoRedundancyResult) videoBPResult;
break;
case VIDEO_CONCURRENT_SESSION:
videoConcurrentSessionResult = (VideoConcurrentSessionResult) videoBPResult;
break;
case VIDEO_VARIABLE_BITRATE:
videoVariableBitrateResult = (VideoVariableBitrateResult) videoBPResult;
break;
case VIDEO_RESOLUTION_QUALITY:
videoResolutionQualityResult = (VideoResolutionQualityResult) videoBPResult;
break;
case VIDEO_ABR_LADDER:
videoSegmentQualityResult = (VideoAdaptiveBitrateLadderResult) videoBPResult;
break;
case AUDIO_STREAM:
videoSeparateAudioResult = (AudioStreamResult) videoBPResult;
break;
default:
break;
}
}
sendGAVideoBPResult(videoBestPracticeResults);
for (AbstractBestPracticeResult bestPractice : bpResults) {
if (bestPractice instanceof VideoStallResult) {
bpResults.set(bpResults.indexOf(bestPractice), videoStallResult);
} else if (bestPractice instanceof VideoStartUpDelayResult) {
bpResults.set(bpResults.indexOf(bestPractice), videoStartUpDelayResult);
} else if (bestPractice instanceof BufferOccupancyResult) {
bpResults.set(bpResults.indexOf(bestPractice), bufferOccupancyResult);
} else if (bestPractice instanceof VideoNetworkComparisonResult) {
bpResults.set(bpResults.indexOf(bestPractice), videoNetworkComparisonResult);
} else if (bestPractice instanceof VideoTcpConnectionResult) {
bpResults.set(bpResults.indexOf(bestPractice), videoTcpConnectionResult);
} else if (bestPractice instanceof VideoChunkSizeResult) {
bpResults.set(bpResults.indexOf(bestPractice), videoChunkSizeResult);
} else if (bestPractice instanceof VideoChunkPacingResult) {
bpResults.set(bpResults.indexOf(bestPractice), videoChunkPacingResult);
} else if (bestPractice instanceof VideoChunkPacingResult) {
bpResults.set(bpResults.indexOf(bestPractice), videoChunkPacingResult);
} else if (bestPractice instanceof VideoRedundancyResult) {
bpResults.set(bpResults.indexOf(bestPractice), videoRedundancyResult);
} else if (bestPractice instanceof VideoConcurrentSessionResult) {
bpResults.set(bpResults.indexOf(bestPractice), videoConcurrentSessionResult);
} else if (bestPractice instanceof VideoVariableBitrateResult) {
bpResults.set(bpResults.indexOf(bestPractice), videoVariableBitrateResult);
} else if (bestPractice instanceof VideoResolutionQualityResult) {
bpResults.set(bpResults.indexOf(bestPractice), videoResolutionQualityResult);
} else if (bestPractice instanceof VideoAdaptiveBitrateLadderResult) {
bpResults.set(bpResults.indexOf(bestPractice), videoSegmentQualityResult);
} else if (bestPractice instanceof AudioStreamResult) {
bpResults.set(bpResults.indexOf(bestPractice), videoSeparateAudioResult);
}
}
traceDataresult.setBestPracticeResults(bpResults);
return traceDataresult;
}
Aggregations