首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视频不播放但音频在android实时流媒体上播放得很好

视频不播放但音频在android实时流媒体上播放得很好
EN

Stack Overflow用户
提问于 2016-09-17 11:34:03
回答 2查看 1.5K关注 0票数 0

我有一个VideoView,用来播放实时流。我找不到问题出在哪里。

在开始时,我使用RTMP使用Vitamio播放实时流,这导致音频播放使屏幕保持空白。我查看了RTMP链接,它在一个网站上运行得很好。我在这方面做了很多研究,但我没有找到任何解决办法。

所以现在,我切换到HTTP来播放活动流,这也导致了同样的问题(即音频播放很好,但是视频是空白的)。

我希望为RTMPHTTP提供解决方案。

有什么建议吗?

更新1:我发现链接有问题。我使用检查我的RTMP和HTTP链接是否正常工作。RTMP链接工作正常,而问题在于HTTP链接。HTTP链接只播放音频。

另一方面,让RTMP链接正常工作,并不能解决使用Vitamio时的问题。对RTMP有什么建议吗?

这是我的代码:

代码语言:javascript
复制
public class ITVLiveStreamActivity extends Activity {

private VideoView liveVideoView;

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

         liveVideoView = (VideoView) findViewById(R.id.liveVideoView);

         MediaController mediaController = new MediaController(this);
         mediaController.setAnchorView(liveVideoView);
         Uri uri = Uri.parse(getIntent().getStringExtra("rtmp://61.16.143.170:1935/live/7khh-8fhu-vxd3-8fuw"));
         liveVideoView.setVideoURI(uri);
         liveVideoView.setMediaController(mediaController);
         liveVideoView.requestFocus();
         liveVideoView.start();

     }
}

更新2:

下面是我使用Vitamio编写的代码

代码语言:javascript
复制
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;

import io.vov.vitamio.LibsChecker;
import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.widget.MediaController;
import io.vov.vitamio.widget.VideoView;

public class ITVLiveStreamActivity extends Activity {

    private String pathToFileOrUrl="rtmp://61.16.143.170:1935/live/7khh-8fhu-vxd3-8fuw";
    private VideoView mVideoView;
    private ProgressDialog progDailog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(!LibsChecker.checkVitamioLibs(this))
            return;
        setContentView(R.layout.activity_itvlive_stream);

        mVideoView = (VideoView)findViewById(R.id.vitamio_videoView);

        progDailog = new ProgressDialog(this);
        progDailog.setCancelable(false);
        progDailog.setMessage(getResources().getString(R.string.loading));
        progDailog.show();

        mVideoView.setVideoPath(pathToFileOrUrl);
        mVideoView.setMediaController(new MediaController(this));
        mVideoView.requestFocus();

        mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                progDailog.dismiss();
                mediaPlayer.setPlaybackSpeed(1.0f);
            }
        });
    }
}

我得到了相同的结果(即音频播放,但视频是空白的。

我在这里添加了截图

EN

回答 2

Stack Overflow用户

发布于 2016-09-17 12:00:01

您可以创建这样的活动来打开默认视频视图

代码语言:javascript
复制
public class VideoViewActivity extends Activity {

    // Declare variables
    ProgressDialog pDialog;
    VideoView videoview;

    // Insert your Video URL
//      String VideoURL; /*= "http://www.androidbegin.com/tutorial/AndroidCommercial.3gp";*/
    String VideoURL;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get the layout from video_main.xml
        setContentView(R.layout.video_view);
        // Find your VideoView in your video_main.xml layout
        videoview = (VideoView) findViewById(R.id.VideoView);
        // Execute StreamVideo AsyncTask
        VideoURL = getIntent().getExtras().getString(Constants.LINK);
//        Log.v("video", VideoURL);
        // Create a progressbar
        pDialog = new ProgressDialog(VideoViewActivity.this);
        // Set progressbar title
        //pDialog.setTitle("Android Video Streaming Tutorial");
        // Set progressbar message
        pDialog.setMessage("Buffering...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        // Show progressbar
        pDialog.show();

        try {
            // Start the MediaController
            MediaController mediacontroller = new MediaController(
                    VideoViewActivity.this);
            mediacontroller.setAnchorView(videoview);
            // Get the URL from String VideoURL
            Uri video = Uri.parse(VideoURL);
            videoview.setMediaController(mediacontroller);
            videoview.setVideoURI(video);

        } catch (Exception e) {
//            Log.e("Error", e.getMessage());
            pDialog.dismiss();
            e.printStackTrace();

        } finally {
            videoview.setOnErrorListener(new OnErrorListener() {
                @Override
                public boolean onError(MediaPlayer mp, int what, int extra) {
                    CommonUtilities.showToast(VideoViewActivity.this, "Video Format not supported by device.");
                    VideoViewActivity.this.finish();
                    return true;
                }
            });
        }

        videoview.requestFocus();
        videoview.setOnPreparedListener(new OnPreparedListener() {
            // Close the progress bar and play the video
            public void onPrepared(MediaPlayer mp) {
                pDialog.dismiss();
                videoview.start();
            }
        });

    }
}
票数 1
EN

Stack Overflow用户

发布于 2016-09-17 12:09:00

嗨,我做了这个,它的工作很好--这里是代码。

代码语言:javascript
复制
public class PlayingLiveStream extends Activity {

VideoView vvmyliveplaying;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_playinglivestream);
    vvmyliveplaying = (VideoView) findViewById(R.id.vvmyliveplaying);
    MediaController mediaController = new MediaController(this);
    mediaController.setAnchorView(vvmyliveplaying);
    Uri uri = Uri.parse(getIntent().getStringExtra("url_play"));
    vvmyliveplaying.setVideoURI(uri);
    vvmyliveplaying.setMediaController(mediaController);
    vvmyliveplaying.requestFocus();

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (item.getItemId() == android.R.id.home) {
        try {
            vvmyliveplaying.pause();
            finish();
        } catch (Exception e) {

        }
    }
    return false;

}
}
代码语言:javascript
复制
<VideoView
    android:id="@+id/vvmyliveplaying"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

编辑的答案

我已经测试了流的维生素库演示样本和它的工作良好。

公共类VideoViewDemo扩展活动{

代码语言:javascript
复制
private VideoView mVideoView;
private String pathToFileOrUrl ="rtmp://61.16.143.170:1935/live/7khh-8fhu-vxd3-8fuw";
private ProgressDialog progDailog;

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    if (!LibsChecker.checkVitamioLibs(this))
        return;
    setContentView(R.layout.videoview);

    mVideoView = (VideoView) findViewById(R.id.surface_view);


    progDailog = new ProgressDialog(this);
    progDailog.setCancelable(false);
    progDailog.setMessage("Please wait");
    progDailog.show();

    mVideoView.setVideoPath(pathToFileOrUrl);
    mVideoView.setMediaController(new MediaController(this));
    mVideoView.requestFocus();

    mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

        @Override
        public void onPrepared(MediaPlayer mediaPlayer) {
            progDailog.dismiss();
            mediaPlayer.setPlaybackSpeed(1.0f);
        }
    });
}

}

以及xml布局,

代码语言:javascript
复制
<io.vov.vitamio.widget.VideoView
    android:id="@+id/surface_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

现在我确信代码很好用。

谢谢,希望这对你有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39546363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档