my Android app directs videos online through VideoView . When playing video from a file, it works fine or even streaming live ( m3u8 ); It is always transmitted from one source, and when I use an external player / browser, it also streams perfectly (so I donβt think this is a problem with the source, which is a variant of a file like this: https://publish.dvlabs.com /democracynow/360/dn2016-0810.mp4
Android Monitor logs this just before the crash:
10-13 12:02:56.204 32460-32748/com.workingagenda.democracydroid D/MediaHTTPConnection: filterOutInternalHeaders: key=User-Agent, val= stagefright/1.2 (Linux;Android 6.0.1) 10-13 12:02:56.205 32460-32472/com.workingagenda.democracydroid D/MediaHTTPConnection: proxy null port 0 10-13 12:02:57.904 32460-32460/com.workingagenda.democracydroid D/MediaPlayer: getMetadata 10-13 12:02:58.438 32460-377/com.workingagenda.democracydroid W/MediaPlayer: info/warning (3, 0)
and then I get these logs on failure:
10-13 12:05:33.812 32460-32472/com.workingagenda.democracydroid W/MediaHTTPConnection: readAt 26869519 / 241 => java.net.ProtocolException: unexpected end of stream 10-13 12:08:32.480 32460-3546/com.workingagenda.democracydroid E/MediaPlayer: error (1, -1004) 10-13 12:08:32.480 32460-32460/com.workingagenda.democracydroid E/MediaPlayer: Error (1,-1004) 10-13 12:08:32.481 32460-32460/com.workingagenda.democracydroid D/VideoView: Error: 1,-1004 [ 10-13 12:08:32.512 5066: 453 E/ ] Destroy C2D instance [ 10-13 12:08:32.512 5066: 453 E/ ] Destroy C2D instance 10-13 12:08:32.635 32460-32472/com.workingagenda.democracydroid E/MediaPlayer: error (1, -1004) 10-13 12:08:32.668 32460-32460/com.workingagenda.democracydroid E/MediaPlayer: Error (1,-1004) 10-13 12:08:32.668 32460-32460/com.workingagenda.democracydroid D/VideoView: Error: 1,-1004
To clarify my question:
- I would like to know what this error is,
E/MediaPlayer: Error (1,-1004) (since I did not find any information on the Internet about this). - If this is what I suspect mainly as the end of a file / stream error, then I hope to get some help with buffering or otherwise load the video in such a way as to avoid this?
I saw this question, Android Streaming with MediaPlayer: Error (1, -1004) and 3GPP video , but the answers do not help much.
I found the function MediaPlayer.prepareAsync() , here https://developer.android.com/reference/android/media/MediaPlayer.html#prepareAsync () , this is automatically called when VideoView opens the video, but this does not seem to work .
Edit
So, the solution brought me to Google ExoPlayer , which was pretty easy to replace for my VideoView, and it works like a charm.
- Add ExoPlayer as a dependency
- Change layout view to
SimpleExoPlayerView - Initialize
SimpleExoPlayer in action - Initialize
MediaSource and connect to the player - Remember
release() when you no longer need to.
And with this, streaming works without problems.