我是android开发的初学者,尝试从链接播放视频.但它给出了错误"sorry,we can't play this video".我尝试了很多链接但是对于所有链接它显示相同的错误.
我的代码如下
public class VideoDemo extends Activity {
private static final String path ="http://demo.digi-corp.com/S2LWebservice/Resources/SampleVideo.mp4";
private VideoView video;
private MediaController ctlr;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(R.layout.videoview);
video = (VideoView) findViewById(R.id.video);
video.setVideoPath(path);
ctlr = new MediaController(this);
ctlr.setMediaPlayer(video);
video.setMediaController(ctlr);
video.requestFocus();
}
}
Run Code Online (Sandbox Code Playgroud)
Logcat显示以下错误消息:
04-12 15:04:54.245: ERROR/PlayerDriver(554): HandleErrorEvent: PVMFErrTimeout
Run Code Online (Sandbox Code Playgroud) 我有一个VideoView,我正在从远程服务器流式传输视频.大多数时候它会非常流畅地播放视频.但有时,它会显示错误消息"抱歉,此视频无法播放".我预感到这更多是支持的视频格式.但是,我不知道哪些是受支持的格式.我的问题是"如何捕获此错误(例如,防止出现错误消息)"?我在这个项目上使用的是Android 2.2.任何建议将不胜感激.:)
我正在开发视频播放器应用程序,我想在原生视频中播放.mp4视频.我无法给播放 视频使用的URL.我收到错误抱歉,该视频无法播放,也我不能够以播放下载的视频在本地videoview.
我在videoview中播放视频的代码:
String mUrl = "http://www.servername.com/projects/projectname/videos/1361439400.mp4";
VideoView mVideoView = (VideoView)findViewById(R.id.videoview)
videoMediaController = new MediaController(this);
mVideoView.setVideoPath(mUrl);
videoMediaController.setMediaPlayer(mVideoView);
mVideoView.setMediaController(videoMediaController);
mVideoView.requestFocus();
mVideoView.start();
Run Code Online (Sandbox Code Playgroud)
请分享您的想法.
谢谢.
我有一个简单的对话框,里面有一个VideoView,我想循环播放视频.
我目前正在使用快速修复程序
//Video Loop
vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
vv.start();
}
});
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更好的方法?
编辑
我正在添加更多代码,因为我不知道如何从以下形式访问MediaPlayer对象VideoView:
String path = defaultPath+currentVideoRessource;
if (path == null || path.length() == 0) {
Log.e("extra","File URL/path is empty");
} else {
// If the path has not changed, just start the media player
if (!path.equals(current) && mVideoView != null) {
Uri pathURI = Uri.parse(defaultPath+currentVideoRessource);
mVideoView.setVideoURI(pathURI);
}
current = path;
mVideoView.setOnCompletionListener(new MyOnCompletionListener(this));
//Video Loop
// mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
// public …Run Code Online (Sandbox Code Playgroud) 我有一个带有VideoView的应用程序,我设置了一个视频在VideoView中播放.在视频播放的某个时刻,它将暂停.然后在暂停一段时间后,它将再次开始播放视频,但是如果视频没有暂停,则向前搜索视频的位置.所以举个例子
视频开始播放
视频暂停6秒
视频暂停10秒钟
视频再次开始播放<---此时我希望视频以16秒标记开始播放.
为了达到这个效果,我设置了时间戳来完成所需的数学运算,所以我知道视频暂停了多长时间,然后当我再次启动时,我打电话 mVideoView.seekTo(timePlayed + timePaused);
这一切都适用于Toshiba Thrive和Motorola Xoom.但是在Acer Iconia A200上似乎从我调用seekTo()向前看,VideoView将始终在我调用的同时返回getCurrentPosition().为了说明这一点,我设置了一个runnable,它大约每1000ms触发一次,记录当前位置.以下是一些输出:
/****************
* These are from before it is paused/resumed
* you can see that the current time is functioning
* as expected.
******************/
Current Position = 0
Current Position = 734
Current Position = 1735
Current Position = 2703
Current Position = 3737
Current Position = 4738
Current Position = 5739
Current Position = 6740
Current Position = 7741
Current Position = 8742
Current …Run Code Online (Sandbox Code Playgroud) android timestamp seek android-mediaplayer android-videoview
我正在制作一个应用程序,我必须在Fragment中的 assets文件夹中显示视频.任何人都可以帮我这样做吗?我需要在XML中使用VideoView吗?
我正在开发一个Android应用程序,需要在其中嵌入youtube视频播放器.我成功地从API获得了RTSP视频URL,但在我的Android视频视图中尝试加载此rtsp url时,它显示" Can't play this video.".以前我在这个方法中开发了一个类似的应用程序,当时工作正常,但现在也无法加载.
我很确定,我从API获得了正确的RTSP网址. rtsp://v6.cache6.c.youtube.com/CiULENy73wIaHAlV9VII3c64lRMYESARFEgGUglwbGF5bGlzdHMM/0/0/0/video.3gp
这是我的活动代码:
mVideoURL = getIntent().getStringExtra("EXT_URL");
Log.i("VIDEO URL", " " + mVideoURL);
MediaController mc = new MediaController(this);
mVideoStreamView = (VideoView) findViewById(R.id.vidPlayer);
mVideoStreamView.setVideoURI(Uri.parse(mVideoURL));
mVideoStreamView.setMediaController(mc);
mVideoStreamView.requestFocus();
mVideoStreamView.start();
Run Code Online (Sandbox Code Playgroud)
编辑 从logcat中找到一些其他信息:
ARTSPConnection(6607): status: RTSP/1.0 200 OK
ASessionDescription(6607): v=0
ASessionDescription(6607): o=GoogleStreamer 378992432 328144046 IN IP4 74.125.213.182
ASessionDescription(6607): s=Video
ASessionDescription(6607): c=IN IP4 0.0.0.0
ASessionDescription(6607): b=AS:29
ASessionDescription(6607): t=0 0
ASessionDescription(6607): a=control:*
ASessionDescription(6607): a=range:npt=0-1703.000000
ASessionDescription(6607): m=video 0 RTP/AVP 98
ASessionDescription(6607): b=AS:17
ASessionDescription(6607): a=rtpmap:98 H263-2000/90000
ASessionDescription(6607): a=control:trackID=0
ASessionDescription(6607): a=cliprect:0,0,144,176
ASessionDescription(6607): a=framesize:98 176-144 …Run Code Online (Sandbox Code Playgroud) 我正在进行活动
VideoView - 从网络服务器流式传输视频.
按钮 - 使用户进入下一个要显示的活动.
应用程序启动时,VideoView将从Web服务器播放视频.
现在假设
Total Video length is 60 Minutes
Current Video progress is 20 Minutes
Current Buffered progress 30 Minutes
Run Code Online (Sandbox Code Playgroud)
现在,当我点击上面提到的Button时,用户将进入下一个活动.
如果按下后退按钮,则从该活动开始,用户前面会显示"上一个活动"(带有VideoView和"按钮").但是当恢复时,视频的所有缓冲部分都会丢失,因此VideoView从一开始就播放视频,这真的很糟糕. < - 实际问题
问题
当Activity重新恢复时,视频的缓冲部分会丢失,因此会再次开始缓冲.那么如何克服重新缓冲视频的缓冲部分呢?
甚至官方Youtube Android应用程序.有同样的问题.
编辑1:
我在Activity中尝试了下面的代码,但它不起作用.
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
videoView.suspend();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
videoView.resume();
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以指导我这个问题吗?或者我错过了一些能使这项工作完美的东西?
目前的解决方法
我已经用onPause()方法和onResume()方法保存了视频的当前播放位置,我已经使用该位置来寻找该持续时间的视频.这很好用.但是视频缓冲从一开始就从搜索位置开始视频开始.
非常感谢任何帮助.
android video-streaming android-video-player android-videoview
我有一个像这样设置的VideoView:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/player"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<VideoView
android:id="@+id/video"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:layout_centerVertical="true" />
<ProgressBar
android:id="@+id/loader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
但VideoView匹配父容器的宽度,然后根据加载的影片的宽高比设置高度.
我想做的恰恰相反,我希望VideoView与父级的高度相匹配,同时保持宽高比不变,视频将被剪裁在两侧.
我设法拉伸VideoView来填充父级,但是不保持宽高比.
另一件事是,我将MediaController添加到VideoView,如下所示:
MediaController controllers = new MediaController(this) {
@Override
public void hide() {
if (state != State.Hidden) {
this.show();
}
else {
super.hide();
}
}
};
controllers.setAnchorView(videoView);
videoView.setMediaController(controllers);
videoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
controllers.show();
}
});
Run Code Online (Sandbox Code Playgroud)
这很好用,并且控制器始终保持打开状态,但在计算放置视频的位置时(因为它垂直居中),控制器的高度不会被考虑在内.
我的两个问题是:
谢谢.
我需要能够在屏幕上旋转视频,因此我创建了一个自定义TextureView,它在MediaPlayer上提供了一个便利层,类似于VideoView当前实现的方式.这个Android博客文章说下面关于TextureView:
由于SurfaceView的内容不在应用程序窗口中,因此无法有效地转换(移动,缩放,旋转).这使得在ListView或ScrollView中使用SurfaceView变得很困难.SurfaceView也无法与UI工具包的某些功能正确交互,例如淡化边缘或View.setAlpha().
为了解决这些问题,Android 4.0引入了一个名为TextureView的新小部件,它依赖于硬件加速的2D渲染管道和SurfaceTexture.TextureView提供与SurfaceView相同的功能,但与SurfaceView不同,它表现为常规视图.例如,您可以使用TextureView来显示OpenGL场景或视频流.TextureView本身可以是动画,滚动等.
然而,看起来TextureView正在努力播放视频.我正在测试的目标设备有一个1.2Ghz Rockchip RK3066双核CPU,四核Mali-400 GPU(ARM)和1GB RAM.在此设备上使用VideoViews的相同代码表现不错,但TextureViews在播放时"口吃"或根本不显示(左上角带有白色方框的黑框),具体取决于具体设备.TextureViews使用英特尔提供的x86"设备"在仿真器上运行良好.
这种性能是否会受到影响,或者我应该在其他地方寻找问题?谢谢
android ×10
video ×2
aspect-ratio ×1
dimensions ×1
mp4 ×1
performance ×1
seek ×1
timestamp ×1
youtube ×1