2

我使用以下代码从 url 播放视频。它工作正常,除了它首先下载视频然后播放该视频

  Uri uri = Uri.parse(URL);
  video.setVideoURI(uri);
  video.start();

但我想流式传输实时视频而不是下载它然后播放

4

4 回答 4

3

流媒体工作有一些要求。

该文件可能未“正确”编码

http://developer.android.com/guide/appendix/media-formats.html

对于通过 HTTP 或 RTSP 流式传输的视频内容,还有其他要求:

  • 对于 3GPP 和 MPEG-4 容器,moov原子必须在任何mdat原子之前,但必须在ftyp原子之后。
  • 对于 3GPP、MPEG-4 和 WebM 容器,对应相同时间偏移的音频和视频样本可能相隔不超过 500 KB。为了最大限度地减少这种音频/视频漂移,请考虑以较小的块大小交错音频和视频。

您可能使用的是不支持它的旧版 Android

HTTP 渐进式流媒体仅在 2.2 中添加,HTTPS 仅支持 3.0+,实时流媒体仅在更高版本中支持。

于 2013-07-01T15:03:40.663 回答
3

我在 YouTube 视频流上工作,而且没有下载视频。这只有在您播放 YouTube 视频时才有效。

您必须使用 YouTube API,并且使用它可以轻松管理您的任务。

您必须启用 YouTube 服务并使用Developer Key您可以访问 YouTube API。

如何使用 YouTube API?您可以在此处找到相同的示例代码。

在我使用的那个示例示例中

PlayerViewDemoActivity.java&YouTubeFailureRecoveryActivity.java和 XML 视图根据需要。

播放视频

public class PlayerViewDemoActivity extends YouTubeFailureRecoveryActivity
{
    String  youtube_id = "_UWXqFBF86U";

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playerview_demo);

        YouTubePlayerView youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view); // Replace your developer key
        youTubeView.initialize(DeveloperKey.DEVELOPER_KEY, this);

    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider,
            YouTubePlayer player, boolean wasRestored)
    {
        if (!wasRestored)
        {
            player.cueVideo(youtube_id);
        }
    }

    @Override
    protected YouTubePlayer.Provider getYouTubePlayerProvider()
    {
        return (YouTubePlayerView) findViewById(R.id.youtube_view);
    }

}

希望这会对您有所帮助,如果您有任何疑问,请告诉我。

于 2013-07-29T17:08:21.850 回答
0

progressbar为了显示缓冲,你必须放ProgressDialog......在这里我发布progressDialog缓冲......

pDialog = new ProgressDialog(this);

    // Set progressbar message
    pDialog.setMessage("Buffering...");
    pDialog.setIndeterminate(false);
    pDialog.setCancelable(false);
    // Show progressbar
    pDialog.show();

    try {
        // Start the MediaController
        MediaController mediacontroller = new MediaController(this);
        mediacontroller.setAnchorView(mVideoView);      

        Uri videoUri = Uri.parse(videoUrl);
        mVideoView.setMediaController(mediacontroller);
        mVideoView.setVideoURI(videoUri);

    } catch (Exception e) {

        e.printStackTrace();
    }

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

        public void onCompletion(MediaPlayer mp) {
            if (pDialog.isShowing()) {
                pDialog.dismiss();
            }
            finish();               
        }
    });
于 2014-08-27T11:25:51.803 回答
0

像这样使用:

Uri uri = Uri.parse(URL); //Declare your url here.

VideoView mVideoView  = (VideoView)findViewById(R.id.videoview)
mVideoView.setMediaController(new MediaController(this));       
mVideoView.setVideoURI(uri);
mVideoView.requestFocus();
mVideoView.start();

另一种方法:

  String LINK = "type_here_the_link";
  VideoView mVideoView  = (VideoView) findViewById(R.id.videoview);
  MediaController mc = new MediaController(this);
  mc.setAnchorView(videoView);
  mc.setMediaPlayer(videoView);
  Uri video = Uri.parse(LINK);
  mVideoView.setMediaController(mc);
  mVideoView.setVideoURI(video);
  mVideoView.start();

如果您收到此错误无法在客户端打开文件,请尝试 Android 中的服务器端错误。并参考这个。希望这会给你一些解决方案。

于 2013-07-27T13:08:50.593 回答