Android两个MediaPlayers同时跳过

发布

我有一个可以同时播放两个视频的应用程序。在MotoG(Android 4.4.4)上,如果应用程序正在播放在Android设备上生成的两个视频,则可以正常运行。如果它正在播放在iOS上生成的单个视频,则效果很好。

但是,如果播放器播放的是iOS上生成的1个视频,而播放的是iOS或Android上的第二个视频,则播放器会发疯并跳过并结结巴巴,无法正常播放。

两种文件格式之间存在细微差别,但是由于两个文件本身都能正常播放,因此我认为这应该可以在Android上使用。以下是不同视频文件的ffmpeg信息。

如果有所不同,则将MediaPlayers它们挂钩显示在布局xml中SurfaceHolder来自的SurfaceView上。

任何帮助,将不胜感激!

在iOS上创建的文件:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'createdOnIOS.mp4': Metadata: major_brand : mp42 minor_version : 1 compatible_brands: mp41mp42isom creation_time : 2015-02-20 08:01:30 Duration: 00:00:06.34, start: 0.000000, bitrate: 1577 kb/s Stream #0:0(und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv, smpte170m), 360x480, 1509 kb/s, 29.98 fps, 29.97 tbr, 600 tbn, 1200 tbc (default) Metadata: creation_time : 2015-02-20 08:01:30 handler_name : Core Media Video Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 63 kb/s (default) Metadata: creation_time : 2015-02-20 08:01:30 handler_name : Core Media Audio

在Android上创建的文件:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'createdOnAndroid.mp4': Metadata: major_brand : isom minor_version : 0 compatible_brands: isom3gp4 creation_time : 2015-02-20 08:10:17 Duration: 00:00:06.08, start: 0.000000, bitrate: 6096 kb/s Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 720x480, 6002 kb/s, SAR 65536:65536 DAR 3:2, 24.68 fps, 90k tbr, 90k tbn, 180k tbc (default) Metadata: rotate : 90 creation_time : 2015-02-20 08:10:17 handler_name : VideoHandle encoder : MOTO Side data: displaymatrix: rotation of -90.00 degrees Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default) Metadata: creation_time : 2015-02-20 08:10:17 handler_name : SoundHandle

发布

弄清楚了!(有点。)

在android上MediaPlayer有一个的回调OnVideoSizeChanged我使用该回调函数来调整用户界面,以确保视频宽高比正确显示。由于某些原因,在iOS视频上,调整视频视图的大小导致OnVideoSizeChanged再次被调用。这导致视图被更新,正在调用OnVideoSizeChanged...,从而导致视图性能不佳。

简而言之,解决方法是:

public void onVideoSizeChanged(MediaPlayer mp, int width, int height)
{
  if(mViewSize == null || mViewSize.x != width ||
                          mViewSize.y != height)
  {
    mViewSize = new Point(width, height);
    updateViews();
  }
}

我仍然不确定为什么android视频没有引起这种现象,但是至少我弄清楚了如何解决我的即时问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章