我有一個需求,我需要從Android中的HLS流提取元數據。我找到了兩個庫FFMPEG和VITAMIO。考慮到在Android上支持HLS流式傳輸,並且在閱讀了大量更令人困惑的文章之後,我已經完成了上述兩個庫的進一步研究。我還沒有發現一個應用程序,其中提取了元數據(定時元數據)在Android上完成。從HLS流提取元數據(m3u8文件)
我很困惑,如果它甚至可能在Android上。如果是這樣,我應該使用哪種方法... 幫我出去傢伙....
我有一個需求,我需要從Android中的HLS流提取元數據。我找到了兩個庫FFMPEG和VITAMIO。考慮到在Android上支持HLS流式傳輸,並且在閱讀了大量更令人困惑的文章之後,我已經完成了上述兩個庫的進一步研究。我還沒有發現一個應用程序,其中提取了元數據(定時元數據)在Android上完成。從HLS流提取元數據(m3u8文件)
我很困惑,如果它甚至可能在Android上。如果是這樣,我應該使用哪種方法... 幫我出去傢伙....
按照Nikola的回答建議,定時文本元數據不存儲在m3u8文件中,而是存儲在mpeg2 ts段中。它是如何嵌入到TS的概述,請訪問:https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/HTTP_Live_Streaming_Metadata_Spec/HTTP_Live_Streaming_Metadata_Spec.pdf
你可以嘗試提取與ffmpeg的元數據,該命令應沿此線的東西:
的ffmpeg -i in.ts -f ffmetadata metadata.txt
您需要使用jni和libavformat來做同樣的事情。這並不容易,而且您仍然需要提出一種機制,將讀取的元數據發送給您的應用程序。
如果可以,我建議通過單獨的機制發信號通知定時元數據。你能解開它並把它作爲你的播放器單獨下載的文本文件嗎?那麼你按照視頻播放器報告的時間表排隊?這實現起來會簡單得多,但我不知道你的要求。
解析m3u8是相對容易的。您需要創建HashMap
的String
和Integer
來存儲分析的數據。 M3U8文件由3個入口標籤組成,它們分別代表m3u8的入口,媒體序列和所有媒體文件的片段持續時間,除最後一個之外,與其餘部分不同。
每個之後#EXTINF
整數持續時間是堅持它,所以我們需要通過解析與基本正則表達式字符串得到這個。
private HashMap<String, Integer> parseHLSMetadata(InputStream i){
try {
BufferedReader r = new BufferedReader(new InputStreamReader(i, "UTF-8"));
String line;
HashMap<String, Integer> segmentsMap = null;
String digitRegex = "\\d+";
Pattern p = Pattern.compile(digitRegex);
while((line = r.readLine())!=null){
if(line.equals("#EXTM3U")){ //start of m3u8
segmentsMap = new HashMap<String, Integer>();
}else if(line.contains("#EXTINF")){ //once found EXTINFO use runner to get the next line which contains the media file, parse duration of the segment
Matcher matcher = p.matcher(line);
matcher.find(); //find the first matching digit, which represents the duration of the segment, dont call .find() again that will throw digit which may be contained in the description.
segmentsMap.put(r.readLine(), Integer.parseInt(matcher.group(0)));
}
}
r.close();
return segmentsMap;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
乾杯。
感謝您的回覆......我需要閱讀元數據......例如,我需要知道用戶何時播放,暫停,在視頻中尋找特定時間等。將這些數據存儲(更新在m3u8文件中)。 ALSO android默認視頻播放器不允許在hls流中尋找。我應該使用ffmpeg構建我自己的視頻棧還是去維塔米奧? – anz
更新m3u8與閱讀元數據完全不同。 –
該功能給我只有甚至索引.ts文件你能告訴我如何從m3u8鏈接獲得所有.ts文件android –
感謝您的回覆...你知道我的要求是否可以使用libvlc for android – anz
libvlc_media_new_location ()+ libvlc_media_parse()+ libvlc_media_get_meta()看起來可能有效。我從來沒有嘗試過。 – vipw
你能否向我提供關於如何從ts段中檢索元數據的指針? – anz