Android MediaPlayer未更新文件持续时间
我打开一个连接,将一个流下载到SD卡上的一个文件中。在写入一些字节后,我启动MediaPlayer播放该文件 我的问题是MediaPlayer只读取了在第二阶段计算的持续时间Android MediaPlayer未更新文件持续时间,android,stream,media-player,radio,duration,Android,Stream,Media Player,Radio,Duration,我打开一个连接,将一个流下载到SD卡上的一个文件中。在写入一些字节后,我启动MediaPlayer播放该文件 我的问题是MediaPlayer只读取了在第二阶段计算的持续时间 准备这是正确的行为。当您使用MediaPlayer播放本地文件时,当MediaPlayer初始化时,文件将被扫描一次,不再开始进一步扫描。MediaPlayer不知道您将向文件追加更多数据。一种解决方案是使用MediaPlayer直接在网络上传输文件。我通过在新的媒体播放器中临时打开同一文件,获取持续时间并再次发布,解决了
准备这是正确的行为。当您使用MediaPlayer播放本地文件时,当MediaPlayer初始化时,文件将被扫描一次,不再开始进一步扫描。MediaPlayer不知道您将向文件追加更多数据。一种解决方案是使用MediaPlayer直接在网络上传输文件。我通过在新的媒体播放器中临时打开同一文件,获取持续时间并再次发布,解决了这个问题。为了节省系统资源,只应定期执行此操作,例如每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;
}
public boolean fileSizeHasChanged(){
long currentFileSize=新文件(mCurrentMediaFile).length();
如果(currentFileSize==mLastFileSize)
返回false;
mLastFileSize=当前文件大小;
返回true;
}
public int getDuration(){
长currentDurationCheck=System.currentTimeMillis();
如果(currentDurationCheck-mLastDurationCheck<5000)
返回时间;
mLastDurationCheck=currentDurationCheck;
如果(!fileSizeHasChanged())
返回时间;
//mp是实际播放的主要媒体播放器,mp2是辅助媒体播放器
MediaPlayer mp2=新的MediaPlayer();
试一试{
mp2.setDataSource(mCurrentMediaFile);
mp2.prepare();
mDuration=mp2.getDuration();
mp2.释放();
}捕获(例外e){
e、 printStackTrace();
}
返回时间;
}
您能否添加一些代码,让我们确切了解它的工作原理?MediaPlayer有时是一个狡猾的野兽,看到实际的代码通常很有帮助。谢谢谢谢你的回答,我将流下载到文件中,以便稍后记录其中的一部分。有没有办法让MediaPlayer更新文件的新持续时间??Iphone播放器每秒更新一次持续时间