我使用以下代码从 url 播放视频。它工作正常,除了它首先下载视频然后播放该视频
Uri uri = Uri.parse(URL);
video.setVideoURI(uri);
video.start();
但我想流式传输实时视频而不是下载它然后播放
我使用以下代码从 url 播放视频。它工作正常,除了它首先下载视频然后播放该视频
Uri uri = Uri.parse(URL);
video.setVideoURI(uri);
video.start();
但我想流式传输实时视频而不是下载它然后播放
流媒体工作有一些要求。
该文件可能未“正确”编码
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+,实时流媒体仅在更高版本中支持。
我在 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);
}
}
希望这会对您有所帮助,如果您有任何疑问,请告诉我。
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();
}
});
像这样使用:
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 中的服务器端错误。并参考这个。希望这会给你一些解决方案。