Kevin
Kevin

Reputation: 1443

Android ExoPlayer seeking very slow

I am switching from VideoView to ExoPlayer. I have used the Sample code included with the ExoPlayer from the GIT repository and I have videos playing just fine if I start the video and let it play to the end.

The issues arise when I use the seek bar to move back and forth. If I just tap on the bar and wait for it to seek to the position there is a bit of a delay and I may see messages in the log file about the program doing too much work on the main thread.

If I drag the seek bar I will see a bunch of "new range: offset= ######" type messages as if they did not wait between each seek bar movement point before they make a request to the server. It can take a very long time, as in you get application not responding messages, before the final seek occurs and the video plays again from that position.

I am using the DefaultRendererBuilder for the videos as the server hosting the content does not respond to the SmoothStreaming or DashVod modes.

All of this works just fine using the standard MPMoviePlayerController in the iOS project, same videos, same server, smooth seeking start to end so it appears the server is dishing out reasonable content.

I was really hoping switch from VideoViewer to ExoPlayer would get around these issues. I had the same issues with VideoViewer where seeking past end of buffer would cause it fits. At least that works better in ExoPlayer but now I have the new issues of seeking by dragging being nearly unusable.

If changes need to be made on the server that can be accomplished as we own and code both sides of things. Since everything appears to be working fine from iOS I am thinking this is more of an Android code side issue than a server side issue.

The videos are all in the 30 second to 4 minute range and are MP4 format. This is a typical response header:

response.headers={ 
"Accept-Ranges" = bytes; 
"Content-Length" = 24267506; 
"Content-MD5" = [[redacted]]; 
"Content-Type" = "application/octet-stream"; 
Date = "Mon, 08 Sep 2014 19:27:04 GMT"; 
Etag = [[redacted]]; 
"Last-Modified" = "Mon, 08 Sep 2014 16:44:48 GMT"; 
Server = "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0"; 
"x-ms-blob-type" = BlockBlob; 
"x-ms-lease-state" = available; 
"x-ms-lease-status" = unlocked; 
"x-ms-meta-aspect_ratio_x" = 16; 
"x-ms-meta-aspect_ratio_y" = 9; 
"x-ms-meta-audio_bit_rate" = 1536000; 
"x-ms-meta-created_date" = "9/8/2014 4:44:45 PM"; 
"x-ms-meta-essence_typeid" = 2359823; 
"x-ms-meta-expected_filesize" = 24267506; 
"x-ms-meta-framerate" = "29.97"; 
"x-ms-meta-generation" = 102; 
"x-ms-meta-height" = 288; 
"x-ms-meta-interlaced" = True; 
"x-ms-meta-video_bit_rate" = 974503; 
"x-ms-meta-width" = 512; 
"x-ms-request-id" = [[redacted]]; 
"x-ms-version" = "2014-02-14"; 
} 

Upvotes: 3

Views: 2779

Answers (1)

CarlLee
CarlLee

Reputation: 4182

Don't if you still need the answer, but fine-tuning some of the parameters like buffer segment size and buffer segment count will hugely impact buffering speed.

Upvotes: 1

Related Questions