AssetFileDescriptor afd = this.getAssets().openFd(mediaElementArray.getInteger.valueOf(index)));
myMediaplayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
this one works.. actually in assets folder what ever you store is saved as one large compressed chunk , so you need to assign afd.getStartOffset(),afd.getLength()
also. as it will tell what from where the source u r requesting for starts and whats the length of it, which helps it to calculate the valid requested file in that large chunk.
Or the other reason can be .. the file you are referencing is not of correct format or might be corrupt