private void logURIError(String url, MediaStreamAnalyzerResult result, HLSMediaFile file) { String message = String.format(ErrorType.INVALID_URI_FOUND.getMessageFormat(), url); ErrorLogEntry entry = new ErrorLogEntry( ErrorType.INVALID_URI_FOUND, file != null ? file.getFileName() : HLSConstants.APPLICATION, message, HLSConstants.FILE_LEVEL); result.addError(entry); }
private void analyzeTransportStream(HLSMediaFile file, String tsURL) { System.out.println(tsURL); IContainer container = IContainer.make(); IContainerFormat format = IContainerFormat.make(); format.setInputFormat(".ts"); int returnCode = container.open(tsURL, IContainer.Type.READ, format); if (returnCode >= 0) { BigDecimal bitRate = BigDecimal.valueOf(container.getBitRate()); BigDecimal duration = BigDecimal.valueOf(container.getDuration()); BigDecimal inSeconds = duration.divide(BigDecimal.valueOf(1000000)); System.out.println(bitRate); System.out.println(inSeconds.toString()); TransportStreamFileInfo tsFileInfo = new TransportStreamFileInfo(); tsFileInfo.setDuration(inSeconds); tsFileInfo.setCalculatedBitRate(bitRate); tsFileInfo.setFileName(tsURL); file.addTsFiles(tsFileInfo); } container.close(); }
private void processFiles(String urlStr, MediaStreamAnalyzerResult result, boolean isAnalyzeTS) { HLSMediaFile file = new HLSMediaFile(urlStr); int lastIndex = urlStr.lastIndexOf('/'); String baseUrl = urlStr.substring(0, lastIndex + 1); InputStreamReader inStreamReader = null; BufferedReader reader = null; LineNumberReader lineNumberReader = null; try { URLConnection connection = getConnection(urlStr, result); InputStream inStream = (InputStream) connection.getContent(); inStreamReader = new InputStreamReader(inStream, Charset.forName("UTF-8")); reader = new BufferedReader(inStreamReader); lineNumberReader = new LineNumberReader(reader); String line = ""; do { line = lineNumberReader.readLine(); if (line != null && !line.trim().isEmpty()) { MediaFileTagType lineType = MediaFileTagType.findTagByLine(line); HLSMediaFileLineInfo lineInfo = new HLSMediaFileLineInfo(); lineInfo.setLineData(line); lineInfo.setLineNumber(lineNumberReader.getLineNumber()); lineInfo.setLineType(lineType); if (lineType.equals(MediaFileTagType.EXT_X_VERSION)) { file.setVersion(Integer.parseInt(HLSUtility.getTagValue(line))); } file.addFileLine(lineInfo); if (lineType.isURI() && !lineType.equals(MediaFileTagType.TRANSPORT_STREAM_URI)) { String nextURL = this.getNextURL(line, baseUrl, lineType); processFiles(nextURL, result, isAnalyzeTS); } else if (lineType.equals(MediaFileTagType.TRANSPORT_STREAM_URI)) { // verify TS file exists String tsURL = this.getNextURL(line, baseUrl, lineType); try { URL url = new URL(tsURL); HttpURLConnection tsConnection = (HttpURLConnection) url.openConnection(); tsConnection.setRequestMethod(HTTPMethods.HEAD.value()); tsConnection.connect(); int responseCode = tsConnection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_NOT_FOUND) { logURIError(tsURL, result, file); } else if (isAnalyzeTS) { // analyzeTransportStream(file, tsURL); } // } catch (MalformedURLException e) { logURIError(tsURL, result, file); } catch (IOException e) { logURIError(tsURL, result, file); } } } // } while (line != null); // After processing file, determine it's type. MediaFileType fileType = MediaFileType.matchFileTypeOnIdentifyingTag(file.getFileLines()); file.setFileType(fileType); result.getFiles().add(file); } catch (MalformedURLException e) { logURIError(urlStr, result, file); } catch (IOException e) { logURIError(urlStr, result, file); } finally { try { if (inStreamReader != null) { inStreamReader.close(); } if (lineNumberReader != null) { lineNumberReader.close(); } if (lineNumberReader != null) { reader.close(); } } catch (IOException io) { System.err.println("Unable to close readers!"); } } }