求Android ExoPlayer很慢

标签 android video streaming

我正在从 VideoView 切换到 ExoPlayer。我使用了 GIT 存储库中 ExoPlayer 附带的示例代码,如果我开始播放视频并让它播放到最后,我的视频播放效果很好。

当我使用搜索栏来回移动时出现问题。如果我只是点击栏并等待它寻找位置,就会有一点延迟,我可能会在日志文件中看到有关程序在主线程上执行过多工作的消息。

如果我拖动搜索栏,我会看到一堆“new range: offset= ######”类型的消息,就好像它们在向服务器发出请求之前没有在每个搜索栏移动点之间等待.这可能需要很长时间,因为在最终搜索发生并且视频从该位置再次播放之前,您会收到应用程序未响应的消息。

我正在为视频使用 DefaultRendererBuilder,因为托管内容的服务器不响应 SmoothStreaming 或 DashVod 模式。

使用 iOS 项目中的标准 MPMoviePlayerController,所有这一切都工作得很好,相同的视频,相同的服务器,从头到尾的平滑搜索,所以看起来服务器正在分发合理的内容。

我真的希望从 VideoViewer 切换到 ExoPlayer 能够解决这些问题。我在使用 VideoViewer 时遇到了同样的问题,寻找过去的缓冲区末端会导致它适合。至少这在 ExoPlayer 中效果更好,但现在我遇到了通过拖动几乎无法使用来寻找的新问题。

如果需要在服务器上进行更改,这可以通过我们拥有和编码事物的两面来完成。由于 iOS 上的一切似乎都运行良好,我认为这更多是 Android 代码方面的问题,而不是服务器端问题。

影片时长在30秒到4分钟之间,MP4格式。这是一个典型的响应头:

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"; 
} 

最佳答案

如果您仍然需要答案,请不要这样做,但是微调某些参数(例如缓冲区段大小和缓冲区段数)将极大地影响缓冲速度。

关于求Android ExoPlayer很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25749602/

相关文章:

java - 如何阅读下载文本中的中断?

android - 如何从android中的联系人列表中删除重复的联系人

video - 优化服务器上​​的视频存储/编码 (J2EE)

video - ffmpeg concat 错误找不到合适的输出格式

javascript - 快速 blob 下载

linux - ffmpeg 实时转码更快的替代方案?

java - Realm.copyFromRealm 导致从不正确的线程访问 Realm。是否可以?

android - 在哪里可以找到 Android 4.1+ 通知栏中的 "clear all"图标

c++ - 在 Linux 上使用 FFmpeg 从 OpenCV 3 编写 x264

postgresql - 从 postgresql 中的表流式传输数据的有效方法?