/** Uses the download URL of a media object of a feeditem to read its ID3 chapters. */ public static void readID3ChaptersFromPlayableStreamUrl(Playable p) { if (AppConfig.DEBUG) Log.d(TAG, "Reading id3 chapters from item " + p.getEpisodeTitle()); if (p != null && p.getStreamUrl() != null) { InputStream in = null; try { URL url = new URL(p.getStreamUrl()); ChapterReader reader = new ChapterReader(); in = url.openStream(); reader.readInputStream(in); List<Chapter> chapters = reader.getChapters(); if (chapters != null) { Collections.sort(chapters, new ChapterStartTimeComparator()); processChapters(chapters, p); if (chaptersValid(chapters)) { p.setChapters(chapters); Log.i(TAG, "Chapters loaded"); } else { Log.e(TAG, "Chapter data was invalid"); } } else { Log.i(TAG, "ChapterReader could not find any ID3 chapters"); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ID3ReaderException e) { e.printStackTrace(); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } } else { Log.e(TAG, "Unable to read ID3 chapters: media or download URL was null"); } }
/** Uses the file URL of a media object of a feeditem to read its ID3 chapters. */ public static void readID3ChaptersFromPlayableFileUrl(Playable p) { if (AppConfig.DEBUG) Log.d(TAG, "Reading id3 chapters from item " + p.getEpisodeTitle()); if (p != null && p.localFileAvailable() && p.getLocalMediaUrl() != null) { File source = new File(p.getLocalMediaUrl()); if (source.exists()) { ChapterReader reader = new ChapterReader(); InputStream in = null; try { in = new BufferedInputStream(new FileInputStream(source)); reader.readInputStream(in); List<Chapter> chapters = reader.getChapters(); if (chapters != null) { Collections.sort(chapters, new ChapterStartTimeComparator()); processChapters(chapters, p); if (chaptersValid(chapters)) { p.setChapters(chapters); Log.i(TAG, "Chapters loaded"); } else { Log.e(TAG, "Chapter data was invalid"); } } else { Log.i(TAG, "ChapterReader could not find any ID3 chapters"); } } catch (IOException e) { e.printStackTrace(); } catch (ID3ReaderException e) { e.printStackTrace(); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } } else { Log.e(TAG, "Unable to read id3 chapters: Source doesn't exist"); } } }
private static void readOggChaptersFromInputStream(Playable p, InputStream input) { if (AppConfig.DEBUG) Log.d(TAG, "Trying to read chapters from item with title " + p.getEpisodeTitle()); try { VorbisCommentChapterReader reader = new VorbisCommentChapterReader(); reader.readInputStream(input); List<Chapter> chapters = reader.getChapters(); if (chapters != null) { Collections.sort(chapters, new ChapterStartTimeComparator()); processChapters(chapters, p); if (chaptersValid(chapters)) { p.setChapters(chapters); Log.i(TAG, "Chapters loaded"); } else { Log.e(TAG, "Chapter data was invalid"); } } else { Log.i(TAG, "ChapterReader could not find any Ogg vorbis chapters"); } } catch (VorbisCommentReaderException e) { e.printStackTrace(); } }