чтение во входном потоке не гарантирует, что все содержимое файла будет удалено за один раз. Проверьте возвращаемое значение на этом in.read (b); линия. Это может выглядеть примерно так:
if(in.read(b) != size)
Log.e("Network","Failed to read all data!");
Это скажет вам, по крайней мере, если вы получаете все свои данные с сетевого уровня. Если вы получили только частичное чтение, но все еще записываете полный байтовый массив на диск, это может объяснить, почему медиапроигрыватель считает файл поврежденным.