I am developing an Android App and I'm using the Android SDK's MediaPlayer
to play some videos in my app. When I play the video in my app, about one out of five times, the audio plays without video. It's not a simple coding error because most of the time the video plays perfectly.
I have considered that a race condition in my code caused the bug. However, I added a number of debug statements and everything seems to be set up properly when the video does not play.
I have scanned the web and SO trying to find solutions but none have been adequate (see below).
Has anyone run into this type of problem before? If so, what did you do?
Similar Questions:
android media player shows audio but no video
android video, hear sound but no video
Some More Details:
- I've come across this bug on two phones. On a Samsung Charge video plays 80% of the time and 20% of the time there's audio but no video. On a T-Mobile Comet it's much worse; video only plays about 10% of the time.
- It's not a problem with the file, I've tried various video files and codecs and get the same issues.
- It's not a problem with the storage medium. I've tried playing the video when it was stored on internal storage and the sdcard, neither makes a difference. I have even tried reading some of the file before playing it, hoping that the system will cache it, but that doesn't seem to help either.
Update:
I've been debugging this and looking through logcat. I've found that when the video works, something like the following appears in logcat:
09-28 00:09:03.651: VERBOSE/PVPlayer(10875): setVideoSurface(0x65638)
But when video doesn't play, it looks like there's a null entry:
09-28 00:03:35.284: VERBOSE/PVPlayer(10875): setVideoSurface(0x0)
Update 2:
When the video fails to play, the function MediaPlayer.OnInfoListener with parameters what==MEDIA_ERROR_UNKNOWN(0x1)
and extra==35
. I looked through the Android code-base to try to determine what unknown error 35 means. I came across the file pv_player_interface.h, which indicates that error code 35 corresponds to something called a PVMFInfoTrackDisable
. I googled that term which brought me to a file called pvmf_return_codes.pdf
. That file gave me the following unintelligible explanation:
4.34. PVMFInfoTrackDisable
Notification that paticular track is disable. This one is on a per track basis. For uncompressed audio/video formats, during the process of selecting tracks available in content, if the decoder doesn't support the track, a PVMFInfoTrackDisable event is sent. The event, if necessary, will be sent once per track.
I feel like I've gone a long way, but am no closer to finding an answer... still investigating.