简体   繁体   English

无法播放视频,但音频在android的Live Streaming上可以正常播放

[英]Video not playing but audio plays fine on Live Streaming in android

I have a VideoView which is used to play live stream. 我有一个VideoView ,用于播放直播。 I am not able to find where the problem occurs. 我找不到问题发生的位置。

In the beginning, I used RTMP to play the live stream using Vitamio which resulted in playing the audio leaving the screen blank. 一开始,我使用RTMP使用Vitamio播放实时流,导致播放音频而使屏幕空白。 I checked out with the RTMP link, it works fine with a website. 我通过RTMP链接签出,它在网站上正常工作。 I surfed a lot about this, but I did not find any solution. 我对此进行了很多冲浪,但是没有找到任何解决方案。

So now, I switched to HTTP to play the live stream which also results in the same problem (ie audio playing fine but video is blank). 所以现在,我切换到HTTP来播放实时流,这也会导致相同的问题(即,音频播放正常,但视频为空白)。

I am expecting a solution for either RTMP or HTTP . 我期待RTMPHTTP的解决方案。

Any Suggestions??? 有什么建议么???

UPDATE 1: I have found a problem with the link. 更新1:我发现链接有问题。 I used VLC Media Player to check whether my RTMP and HTTP link is working fine or not. 我使用VLC Media Player检查我的RTMP和HTTP链接是否工作正常。 The RTMP link works fine whereas the problem was with the HTTP link. RTMP链接工作正常,而问题出在HTTP链接上。 The HTTP link plays only the audio. HTTP链接仅播放音频。

On the other hand, having the RTMP link working fine, it doesn't solve the problem when using Vitamio . 另一方面,使RTMP链接正常工作,则在使用Vitamio时无法解决问题。 Any Suggestions for RTMP?? 对RTMP有任何建议吗?

Here is my code: 这是我的代码:

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();

     }
}

UPDATE 2: 更新2:

Here is my code using Vitamio : 这是我使用Vitamio的代码:

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);
            }
        });
    }
}

I am getting the same result (ie) Audio is playing but video is blank. 我得到的结果相同(即,正在播放音频,但视频为空白。

Here I have added the screenshot 在这里我添加了屏幕截图

屏幕截图

You can create an activity like this to open default Video View 您可以创建这样的活动以打开默认的视频视图

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();
            }
        });

    }
}

hi i have done this and its working fine here is code 嗨,我已经做到了,它的正常工作在这里是代码

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;

}
}

<VideoView
    android:id="@+id/vvmyliveplaying"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Edited Answer 编辑答案

I have tested streaming on vitamio library demo sample and its working fine. 我已经在vitamio库演示示例上测试了流式传输,并且工作正常。

public class VideoViewDemo extends Activity { 公共类VideoViewDemo扩展了Activity {

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);
        }
    });
}

}

and xml layout, 和xml布局,

<io.vov.vitamio.widget.VideoView
    android:id="@+id/surface_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

在此处输入图片说明

Now i'm sure code work well. 现在,我确定代码可以正常工作。

Thanks hope this will help you . 谢谢,希望对您有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM