标签: android-mediaplayer

应该有字幕控制器已经设置Mediaplayer错误Android

每当我播放媒体时,它都会在DDMS中显示警告 Should have subtitle controller already set

我的代码:

private void start() {
    mediaPlayer.start();

        mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            mp.stop();
            mp.release();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

DDMS日志

应该已经设置了字幕控制器

信息/警告(2,0)

当我在Google上搜索时,甚至没有一个与之相关的主题.我怎样才能摆脱或禁用它?

android android-mediaplayer

133
推荐指数
2
解决办法
10万
查看次数

播放资源目录中的音频文件

我有以下代码:

AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3");
player = new MediaPlayer();
player.setDataSource(afd.getFileDescriptor());
player.prepare();
player.start();
Run Code Online (Sandbox Code Playgroud)

问题是,当我运行这段代码时,它会按字母顺序开始播放资源目录中的所有音频文件,而不是只播放我请求的音频文件.我究竟做错了什么?有没有更好的方法从资源目录播放音频文件?

后续问题:将音频文件保存在资源目录中并将它们保存在res/raw目录中是否有区别?除了他们没有获得ID,如果他们在资产目录中的事实.如果我将音频文件移动到res/raw文件夹,那么我有一个重用MediaPlayers 的问题,因为没有id参数setDataSource().我找不到处理这类问题的好指南.

audio android assets android-assets android-mediaplayer

118
推荐指数
4
解决办法
10万
查看次数

媒体播放器在状态0中调用,错误(-38,0)

我目前正在尝试设计一个简单的应用程序,流媒体互联网广播电台.我有电台的URL,我正在设置媒体播放器

    MediaPlayer mediaPlayer = new MediaPlayer();
    try {
        mediaPlayer.setDataSource(URL);
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        mediaPlayer.prepare();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    mediaPlayer.start();
Run Code Online (Sandbox Code Playgroud)

模拟时程序没有崩溃,但没有播放,我收到以下错误:

start called in state 0
Run Code Online (Sandbox Code Playgroud)

就在它下面

Error (-38,0)
Run Code Online (Sandbox Code Playgroud)

有谁知道这意味着什么?

我已经阅读了一些有关这些状态错误的内容,但找不到任何适用于我的项目的内容.

android android-mediaplayer

100
推荐指数
6
解决办法
14万
查看次数

Android中的MediaPlayer和VideoView有什么区别

我想知道在流媒体视频方面它们之间是否存在差异.

我知道VideoView可以用于流媒体和什么是Mediaplayer?据我所知,MediaPlayer可以做同样的事情VideoView吗?

任何人都可以给我答案吗?

如果我想通过使用RTSP到服务器从服务器流式传输视频,我应该从哪个开始?VideoView还是MediaPlayer

有什么建议吗?

streaming android android-mediaplayer android-videoview

93
推荐指数
2
解决办法
4万
查看次数

在按钮上播放声音单击android

单击时如何从原始按钮播放声音按钮?我刚刚创建了一个带id的按钮button1,但无论我写的代码是什么,都是错的.

import android.media.MediaPlayer;

public class BasicScreenActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_basic_screen);
    }

    Button one = (Button)this.findViewById(R.id.button1);
    MediaPlayer = mp;
    mp = MediaPlayer.create(this, R.raw.soho);
    zero.setOnCliclListener(new View.OnClickListener() )

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.basic_screen, menu);
        return true;
    }



}
Run Code Online (Sandbox Code Playgroud)

audio android click playback android-mediaplayer

93
推荐指数
6
解决办法
22万
查看次数

使用MediaPlayer从Android中的URL流式传输音频?

我一直在尝试使用Android内置的MediaPlayer类来流式传输mp3.文档会告诉我,这应该像以下一样简单:

MediaPlayer mp = new MediaPlayer();
mp.setDataSource(URL_OF_FILE);
mp.prepare();
mp.start();
Run Code Online (Sandbox Code Playgroud)

但是我反复得到以下内容.我也尝试过不同的URL.请不要告诉我流式传输不适用于mp3.

E/PlayerDriver(   31): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported
W/PlayerDriver(   31): PVMFInfoErrorHandlingComplete
E/MediaPlayer(  198): error (1, -4)
E/MediaPlayer(  198): start called in state 0
E/MediaPlayer(  198): error (-38, 0)
E/MediaPlayer(  198): Error (1,-4)
E/MediaPlayer(  198): Error (-38,0)
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢,谢谢S

mp3 android audio-streaming android-mediaplayer

86
推荐指数
4
解决办法
19万
查看次数

如何在动态壁纸,中心裁剪和适合宽度/高度适合视频?

背景

我正在制作一个可以显示视频的动态壁纸.一开始我认为这将非常困难,所以有些人建议使用OpenGL解决方案或其他非常复杂的解决方案(例如这个).

无论如何,为此,我发现了各种各样的地方,并且基于这个github库(它有一些bug),我终于得到了它的工作.

问题

虽然我成功地显示了一个视频,但我无法找到控制它与屏幕分辨率相比如何显示的方法.

目前它总是被拉伸到屏幕尺寸,这意味着这个(从这里拍摄的视频):

在此输入图像描述

得到如下:

在此输入图像描述

原因是不同的宽高比:560x320(视频分辨率)与1080x1920(设备分辨率).

注意:我很清楚缩放视频的解决方案,这些解决方案可以在各种Github存储库中找到(例如这里),但我问的是一个动态壁纸.因此,它没有View,所以它对如何做事更加有限.更具体地说,解决方案不能具有任何类型的布局,TextureView或SurfaceView或任何其他类型的View.

我试过的

我尝试使用SurfaceHolder的各种领域和功能,但到目前为止没有运气.例子:

这是我目前的代码(这里有完整的项目):

class MovieLiveWallpaperService : WallpaperService() {
    override fun onCreateEngine(): WallpaperService.Engine {
        return VideoLiveWallpaperEngine()
    }

    private enum class PlayerState {
        NONE, PREPARING, READY, PLAYING
    }

    inner class VideoLiveWallpaperEngine : WallpaperService.Engine() {
        private var mp: MediaPlayer? = null
        private var playerState: PlayerState = PlayerState.NONE

        override fun onSurfaceCreated(holder: SurfaceHolder) {
            super.onSurfaceCreated(holder)
            Log.d("AppLog", "onSurfaceCreated")
            mp = …
Run Code Online (Sandbox Code Playgroud)

android live-wallpaper android-mediaplayer

61
推荐指数
2
解决办法
2948
查看次数

媒体播放器循环:Android

我有3秒的mp3文件.我想连续播放那个mp3文件,用户点击暂停按钮.是否有任何方法循环单个文件并再次播放它,直到用户暂停它.

android android-mediaplayer

60
推荐指数
2
解决办法
5万
查看次数

Android中的SeekBar和媒体播放器

我有一个简单的播放器和录音机.一切都很好,但有一个问题.我想添加搜索栏以查看播放记录的进度,并使用此搜索栏来设置播放器应该播放的位置.我有onProgress但没有效果.这是代码:

package com.example.recorder;

import java.io.IOException;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class MainActivity extends Activity implements OnSeekBarChangeListener
{
    private static final String LOG_TAG = "AudioRecordTest";
    private static String mFileName = null;
    private SeekBar seekBar;
    private MediaRecorder mRecorder = null;
    private Button startRecord, startPlaying, stopPlaying;
    private MediaPlayer   mPlayer = null;

    private void onRecord(boolean start) {
        if (start) {
            startRecording();
        } else {
            stopRecording();
        } …
Run Code Online (Sandbox Code Playgroud)

android android-mediaplayer android-seekbar

52
推荐指数
3
解决办法
10万
查看次数

Android的MediaPlayer为什么需要这么长时间来准备播放的实时流?

我发现Android MediaPlayer准备使用不同的流进行实时流播放所花费的时间差异很大.

硬数据

我在prepareAsync()和onPrepared(MediaPlayer mp)回调之间添加了日志记录,并且每次都测试了几个流.每个流的时间非常一致(+/- 1秒),结果如下:

  1. MPR新闻流:27秒(http://newsstream1.publicradio.org:80/)
  2. MPR古典音乐流:15秒(http://classicalstream1.publicradio.org:80/)
  3. MPR当前流:7秒(http://currentstream1.publicradio.org:80/)
  4. PRI流:52秒(http://pri-ice.streamguys.biz/pri1)

测试是在带有Android 2.3.4的Nexus S上进行的3G连接(~1100 Kbps).

播放非流式MP3音频文件不是问题.

以下是我如何播放流的片段:

准备MediaPlayer:

...
mediaPlayer.setDataSource(playUrl);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.prepareAsync();
...
Run Code Online (Sandbox Code Playgroud)

然后在onPrepared(MediaPlayer mp):

mediaPlayer.start();
Run Code Online (Sandbox Code Playgroud)

为什么要准备一些流而不是其他流需要这么长时间?上述数据似乎表明它可能基于已缓冲的数据而不是缓冲的音频内容的持续时间.真的可以吗?

更新:我已经使用Android 1.6,2.2和2.3.4以及1.6,2.1,2.2,2.3.1和2.3.3的仿真器测试了物理设备上的实时流媒体.我只看到2.3.3和2.3.4的长时间延迟.旧版本在5秒内开始播放.

audio streaming android audio-streaming android-mediaplayer

48
推荐指数
3
解决办法
2万
查看次数