my android app streams a video online in a VideoView
. When playing a video from a file, it works fine, or even streaming live (an m3u8
); It's always streaming from the same source, and when I use an external player/browser, it likewise streams fine (so I don't think this is an issue with the source, which is a variation of a file like this: https://publish.dvlabs.com/democracynow/360/dn2016-0810.mp4
The 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 when it crashes:
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 be more precise about my question:
E/MediaPlayer: Error (1,-1004)
is (as I haven't found any info on the web about it). I've seen this question, Android Streaming with MediaPlayer: Error(1, -1004) and 3GPP video, but the answers aren't much help.
I've found a function, MediaPlayer.prepareAsync()
, here https://developer.android.com/reference/android/media/MediaPlayer.html#prepareAsync(), this is automatically called when a VideoView
opens a video, but this doesn't seem to work.
Edit
So the solution brought me to Google's ExoPlayer, which was pretty easy to swap in for my VideoView, and it works like a charm.
SimpleExoPlayerView
SimpleExoPlayer
in ActivityMediaSource
and attach to playerrelease()
when no longer needed.And with that, streaming works seamlessly.
Android MediaPlayer class doesn't provide access to lower level settings such as buffer size.
Form log -1004 means: public static final int MEDIA_ERROR_IO
For me this code is work fine:
try{
MediaController mediaController = new MediaController(this);
Uri video = Uri.parse(url);
mediaController.setAnchorView(videoView);
videoView.requestFocus();
videoView.setMediaController(mediaController);
videoView.setVideoURI(video);
videoView.setOnPreparedListener(new OnPreparedListener()
{
@Override
public void onPrepared(MediaPlayer arg0)
{
videoView.start();
}
});
}catch (Exception e) {
e.printStackTrace();
}
It seemed to have been something relating to the source of the stream, because some sources eventually played on the device, but the one we needed, never played.
If you can see then you know some problem with your stream by the log.
MediaHTTPConnection: readAt 26869519 / 241 => java.net.ProtocolException: unexpected end of stream
That exception is thrown by FixedLengthInputStream when the expected number of bytes (usually set in the content-length header of the response) is larger than the actual data in the response. Check that the content-length header is correct. (If you're supplying your own value for the content length, make sure it is correct.)
For more detail please see this post unexpected end of stream error
Other this one also help you, Please check this link that how to create long time buffer for MediaPlayer
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With