在写完一些字节后我打开一个连接将流下载到SD卡上的文件我启动MediaPlayer来播放文件 我的问题是MediaPlayer只读取了相位计算的Duratio 制备
答案 0 :(得分:0)
这是正确的行为。当您使用MediaPlayer播放本地文件时,初始化MediaPlayer时将扫描文件一次,并且不会再启动扫描。 MediaPlayer不知道您会向该文件追加更多数据。一种解决方案是使用MediaPlayer直接通过网络流式传输文件。
答案 1 :(得分:0)
我通过在新的媒体播放器中暂时打开相同的文件来解决此问题,获取持续时间并再次释放它。为了节省系统资源,这应该只是定期进行,比如每隔5秒进行一次,并且只有在文件实际发生变化的情况下才会这样做。
public boolean fileSizeHasChanged() {
long currentFileSize = new File(mCurrentMediaFile).length();
if (currentFileSize == mLastFileSize)
return false;
mLastFileSize = currentFileSize;
return true;
}
public int getDuration() {
long currentDurationCheck = System.currentTimeMillis();
if (currentDurationCheck - mLastDurationCheck < 5000)
return mDuration;
mLastDurationCheck = currentDurationCheck;
if (!fileSizeHasChanged())
return mDuration;
// mp is the main media player actual playing, mp2 is the auxillary one
MediaPlayer mp2 = new MediaPlayer();
try {
mp2.setDataSource(mCurrentMediaFile);
mp2.prepare();
mDuration = mp2.getDuration();
mp2.release();
} catch (Exception e) {
e.printStackTrace();
}
return mDuration;
}