Итак, после долгих проб и ошибок при попытке добиться воспроизведения с возможностью поиска и не выдержав терпения, я попытался заставить exoplayer воспроизводить носители с возможностью поиска.
Новый подход, который у меня есть Взято включает в себя загрузку файла с последующим его воспроизведением, поэтому я сделал поток доступным для поиска с оговоркой об ограниченном времени воспроизведения.
Медиа внезапно останавливается, но если я снова воспроизведу медиафайл, он затем проиграет до новой буферизованной позиции, которая указывает на то, что exoplayer может получить обновленный файл и воспроизвести его, пока он не остановится снова.
Ниже из журналов:
2020-08- 02 12: 53: 28.063 21570-21570 / com.demo.de.exoplayerseeker D / BUFFER_BYTES: bytesRead = 10704979
2020-08-02 12:53: 28.964 21570-21636 / com.demo.de.exoplayerseeker D / AudioTrack: stop (), вызываемый с доставленными 9863424 кадрами
2020-08-02 12:53: 29.065 21570-21570 / com.demo.de .exoplayerseeker D / BUFFER_BYTES: байт sRead = 10737580
Итак, мой запрос имеет два типа для достижения одной единственной цели:
- Есть ли способ сообщить exoplayer, что файл обновляется с новым контентом?
- Или мы можем сделать так, чтобы exoplayer постоянно готовил медиаисточник из того же URI или источника?
Вот что я пробовал до сих пор:
private void readCStream() {
final File dir = new File(getFilesDir(), "webStream");
if (!directoryExist(dir)) {
dir.mkdirs();
Log.d("DIRECTORY", "Created");
}
streamPath = null;
if (directoryExist(dir)) {
streamPath = new File(dir, "streamFile.mp3");
try {
streamPath.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
Uri weburi = null;
if (streamPath != null)
weburi = Uri.fromFile(streamPath);
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(stream_url_mp3);
InputStream inputStream = url.openStream();
FileOutputStream fileOutputStream = new FileOutputStream(streamPath);
int c;
while ((c = inputStream.read()) != -1) {
fileOutputStream.write(c);
bytesRead++;
}
} catch (Exception ex) {
Log.d("BUFFER_ERROR", "" + ex);
}
}
}).start();
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
Log.d("BUFFER_BYTES", "bytesRead=" + bytesRead);
handler.postDelayed(this, 1000);
}
};
handler.post(runnable);
if (streamPath != null) {
initPlayer(weburi);
}
}
private void initPlayer(Uri uri) {
exoPlayer = new SimpleExoPlayer.Builder(this).build();
playerView.setPlayer(exoPlayer);
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "exo-app"));
DefaultExtractorsFactory extractorsFactory = new DefaultExtractorsFactory()
.setMp3ExtractorFlags(Mp3Extractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING)
.setConstantBitrateSeekingEnabled(true);
MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(uri);
exoPlayer.prepare(mediaSource);
}
ВЫХОД:
введите описание изображения здесь