Articles of android mediaplayer

流式传输音频文件并缓存它

我想流式传输一个音频mp3文件然后通过Android媒体播放器播放它我还想缓存这个文件 ,这样媒体播放器就不必为最近播放的曲目流播放了。 我尝试过使用prepareAsync方法,但它不能让我访问缓冲区内容,因此我决定自己流式传输音频文件,然后将其传递给媒体播放器进行播放。 我已经通过这篇文章来实现这一点,但是这种方法存在一个问题,即在将文件传输到媒体播放器时,它会进入错误模式,导致我的播放器表现不一致。 当媒体播放器进入其错误模式时,它不会自动退出,因此我被迫创建一个新的媒体播放器,然后重新提供下载的文件,这种解决方法会导致用户在播放歌曲时遇到不希望的暂停。 那么,是否有人改进了上述链接中给出的代码版本? 或者他们是否知道这个问题的更好解决方案, 或者实际上有一个用于在Android中传输音频文件的库? 谢谢

在android中获取mp3持续时间

如何在不创建MediaPlayer实例的情况下获取mp3轨道持续时间? 我只需要在mp3文件列表中显示mp3歌曲长度,所以我认为我不应该为列表中的每个曲目创建MediaPlayer对象 而另一个: 有时MediaPlayer返回错误的歌曲持续时间(我认为它是因为这些文件的比特率是dinamic)。 如何才能获得合适的歌曲持续时间?

在Android上以编程方式获取MPEG-4video流的配置文件

有没有办法使用标准Android API获取MPEG-4video文件的个人资料代码 ? 示例配置文件代码为: baseline , main , high等。 我不想在android应用程序中包含ffmpeg二进制文件来获取此信息。 我在MediaCodecInfo.CodecProfileLevel类中find了配置文件列表的引用。 任何人都可以确认这是否是我应该使用的那个? 以下是从MX Player应用程序中获取的video信息的示例屏幕截图 更新#1:我查看了MX Player应用程序,看起来他们使用ffmpeg二进制文件,所以我可以肯定地说他们使用它来提取profile-code 。 更新#2:我也查看了ExoPlayer v1 API,它们似乎也没有特定的API来获取此信息。

SurfaceView,SurfaceTexture和MediaPlayer无法在android中播放我的video

我正在尝试使用SurfaceView在我的应用程序上播放实时流媒体video,当我尝试使用Vitamio时效果很好,但由于它是一个HTTP链接,我试图摆脱任何第三方库并使用本机类。 我像往常一样尝试过VideoView ,然后我尝试了SurfaceView基本实现失败之后我尝试了像这样的纹理video: @Override public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) { Surface surface = new Surface(surfaceTexture); try { mMediaPlayer = new MediaPlayer(); mMediaPlayer.setDataSource(getApplicationContext(), Uri.parse(link)); mMediaPlayer.setSurface(surface); mMediaPlayer.setLooping(true); mMediaPlayer.prepareAsync(); // Play video when the media source is ready for playback. mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { mediaPlayer.start(); } }); mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { […]

Android 6.0 – 使用PlaybackParams设置video速度

我有关于如何实现PlaybackParams来设置video速度的问题: public PlaybackParams getPlaybackParams () 在API级别23中添加 使用PlaybackParams获取播放速率。 PlaybackParams setSpeed (float speed) //Sets the speed factor. 退货 : 正在使用的播放速率。 抛出IllegalStateException : 如果内部同步引擎或音频轨道尚未初始化。 这是我的代码: mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.setPlaybackParams(new PlaybackParams().setSpeed(1.f)); if (mPlaybackState == PlaybackState.PLAYING) { mVideoView.start();} } });

如何从android中的video文件中获取帧

调用时, MediaMetadataRetriever.getFrameAtTime()始终返回相同的帧。 看看我的代码 private ArrayList getFrames(String path){ try { ArrayList bArray = new ArrayList(); bArray.clear(); MediaMetadataRetriever mRetriever = new MediaMetadataRetriever(); mRetriever.setDataSource(getDataSource(path)); for (int i = 3000; i <60000; i=i+5000) { bArray.add(mRetriever.getFrameAtTime(i, MediaMetadataRetriever.OPTION_CLOSEST_SYNC)); } return bArray; } catch (Exception e) { // TODO: handle exception return null; } } 此方法始终返回相同的帧

Android:MediaPlayer未经发布而最终确定

我正在使用我正在处理的应用程序中的MediaPlayer类。 我希望在我的Activity的生命周期中保留一个MediaPlayer类的实例。 我正在活动的onPause(){}方法中释放MediaPlayer类中的资源,但是当活动开始时,我会在LogCat窗口中popup以下警告: W/MediaPlayer-JNI(16795): MediaPlayer finalized without being released 知道我在这里做错了什么或如何删除此警告? 它似乎没有引起任何问题,声音效果很好。 我有太多的代码要发布,因为我包装了一些对象以允许管理状态(MediaPlayer类当前不提供状态信息),以及其他各种原因,但代码非常多: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initialiseSounds(this); } @Override protected void onPause() { soundManager.releaseResources(); } @Override protected void onResume() { initialiseSounds(this); } 在我的SoundManager类中使用此方法: public void releaseResources() { player.release(); } 在初始化声音我正在做: MediaPlayer player = new MediaPlayer(); player.reset(); player.setAudioStreamType(AudioManager.STREAM_MUSIC); AssetFileDescriptor assetFileDescriptor = context.getResources().openRawResourceFd(resourceId); setDataSource(player, […]

在Android上使用SoundPool进行无缝循环?

我试图用SoundPool类循环短(20kb),无间隙ogg文件,并且在硬件上测试时无法获得一致的结果。 它总是使用模拟器完美播放,但是当我在Nexus 1或Samsumg Galaxy Tab 10.1上进行测试时,每个循环点都会有可听见的popup或点击。 非常奇怪的是,虽然一旦应用程序启动一致,但每次重新启动应用程序时的点击次数都会略有不同,并且在极少数情况下(更常见的是在平板电脑上)循环正常播放。 使用MediaPlayer的结果并不好。 想要在android上无间隙播放音频循环是不合理的吗? 当然有人有类似的function正常工作? 如果是这样,我很想看到它如何运作的一个例子。 谢谢!

流音频延迟

我正在尝试通过服务器传输音频。 我已经设置了所有内容,并且它可以正常录制和播放静态音频,但是当我尝试流式传输音频时,播放方面会出现延迟。 我做了谷歌搜索,但找不到正确的方法。 我正在使用AudioRecord和Audiotrack Android媒体API来发送和接收音频数据。 谁能告诉我如何处理这种延迟? 我在GOOGLE GROUP上添加了我的代码以获得清晰的图片 。 我试过这种方式,将5块音频数据保存在一个缓冲区中,该缓冲区通过服务器并在填充5块数据时再次播放,然后再次获取5块音频数据并填充它直到1024字节数据(它写入录音带和播放方法被称为)。这也有延迟,任何其他解决方案?

MediaPlayer.isplaying()方法中的java.lang.IllegalStateException

public static MediaPlayer mp=null; public static void playGeneric(int name, final ImageButton button,final ImageButton pervious,Context context) { button.setEnabled(false); button.setClickable(false); pervious.setEnabled(false); pervious.setClickable(false); try{ if(mp != null && mp.isPlaying()) { mp.stop(); mp.release(); mp = null; mp=MediaPlayer.create(context, name); mp.start(); } else { mp = MediaPlayer.create(context, name); mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer arg0) { //mp.prepare(); mp.start(); } }); […]