【问题标题】:play rtsp stream on Android在 Android 上播放 rtsp 流
【发布时间】:2013-01-05 16:20:14
【问题描述】:

我需要为两个视频音频播放 android rtsp 流。但无论我做什么,他们都不会开始。视频的 rstp 流采用 .mp4 格式,音频采用 .mp3 格式。该流在 VLC 中播放时工作正常,它显示的分辨率为 320X240。但在这里它只是给出了我在底部发布的错误。另外请告诉如何流式传输 mp3,因为在 android-sdk 的 API Demos 中没有教程。该视频适用于 Vitamio 库。但是不知道怎么自定义。

mMediaPlayer = new MediaPlayer();
        mMediaPlayer.setDataSource(path);
        mMediaPlayer.setDisplay(holder);
        mMediaPlayer.prepare();
        mMediaPlayer.setOnBufferingUpdateListener(this);
        mMediaPlayer.setOnCompletionListener(this);
        mMediaPlayer.setOnPreparedListener(this);
        mMediaPlayer.setOnVideoSizeChangedListener(this);
        mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

//onPrepared(...) Function
public void onPrepared(MediaPlayer mediaplayer) {
    Log.d(TAG, "onPrepared called");
    mIsVideoReadyToBePlayed = true;
    if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
        startVideoPlayback();
    }
} 

//startVideoPlayback() Function 
    private void startVideoPlayback() {
    Log.v(TAG, "startVideoPlayback");
    holder.setFixedSize(mVideoWidth, mVideoHeight);
    mMediaPlayer.start();
}

错误: 01-05 21:10:59.640:错误/MediaPlayerDemo(15989):无效的视频宽度(0)或高度(0)

【问题讨论】:

  • mIsVideoSizeKnown 是如何成为真实的? mVideoWidthmVideoHeight 在哪里设置? logcat也很钝,宽度或高度为0!
  • ipinak OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback
  • t0mm13b 这不是真的,这就是视频无法播放的原因。我只是使用 android-sdk btw 提供的 API Demos
  • 这个 API 和其他许多 API 并不是世界上最好的。另外,不要使用模拟器。
  • ipinak 我几乎不使用模拟器。目前我正在 Galaxy S. Galaxy y、Galaxy S2 和 Galaxy Note 上进行测试

标签: android video-streaming audio-streaming rtsp


【解决方案1】:

把onVideoSizeChanged(...)函数改成:-

public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
        Log.d("onVideoSizeChanged: (%dx%d)", width, height);
        mVideoWidth = mp.getVideoWidth();
        mVideoHeight = mp.getVideoHeight();
        mVideoAspectRatio = mp.getVideoAspectRatio();
        if (mVideoWidth != 0 && mVideoHeight != 0)
            setVideoLayout(mVideoLayout, mAspectRatio);
    }

【讨论】:

    【解决方案2】:
    public void onVideoSizeChanged(MediaPlayer mp, int width, int height)
    {
        if(width == 0 || height == 0) {
            return;
        }
    
        this.width = width;
        this.height = height;
        aspectRatio = width/height;
    
        startVideoPlayback();
    }
    

    我建议你这样做。

    在 onPrepared 方法中,将 startVideoPlayback() 替换为 mediaPlayer.start()

    【讨论】:

    • 没有工作 01-05 21:47:37.000:错误/MediaPlayerDemo(18711):无效的视频宽度(0)或高度(0) 01-05 21:47:37.906:错误/MediaPlayer( 18711): 错误 (1, -2147483648) 01-05 21:47:37.910: 错误/MediaPlayer(18711): 错误 (1,-2147483648)
    • 你能不能换成 mediaPlayer.prepareAsync();而不是 mediaPlayer.prepare();不过,我不确定这是否真的很重要。
    • 您是否设置了 mediaPlayer 的显示? mediaPlayer.setDisplay(holder);
    • 是的,我已经这样做了.. 除了你告诉我这样做的部分之外,我没有更改代码。
    • 你能上传整个文件吗,因为我没有样本了。
    猜你喜欢
    • 1970-01-01
    • 2011-11-19
    • 2014-01-29
    • 2011-08-18
    • 2013-01-03
    • 2012-07-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多