我有一个在scrollView中的VideoView.当我滚动scrollView时,VideoView不会滚动它.这就像它的位置是固定的.如何通过滚动scrollView中的所有其他元素正确滚动VideoView?
在VideoView开始播放之前,我找不到任何显示加载动画(或只是一个imageView)的解决方案:在视频缓冲期间.
有人有线索吗 ?
谢谢.
我正在构建一个应用程序,用户点击按钮以全屏显示视频.最初,视频附加到ViewPager内的视图.为了能够全屏显示,我将其与父项分离,并将其重新连接到根视图.这种方法很好,除非在播放时将视频切换为全屏.当我分离播放VideoView时,它只是停止,我需要重新启动它.这是不可接受的,因为视频在恢复之前开始缓冲.这里是完成分离的代码部分:
final ViewGroup parent = (ViewGroup) findViewById(R.id.parent);
final ViewGroup root = (ViewGroup) findViewById(R.id.root);
Button b = (Button) findViewById(R.id.button);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
parent.removeView(mVideoView);
LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
root.addView(mVideoView, lp);
}
});
Run Code Online (Sandbox Code Playgroud)
根据设备,我有一个不同的日志错误.可能是因为实际的视频播放器是由制造商提供的,而不是Android SDK.以下是Nexus 7的错误日志:
10-30 20:26:18.618: D/NvOsDebugPrintf(124): NvMMDecTVMRDestroyParser Begin
10-30 20:26:18.618: D/NvOsDebugPrintf(124): --------- Closing TVMR Frame Delivery Thread -------------
10-30 20:26:18.678: D/NvOsDebugPrintf(124): ------- NvAvpClose -------
10-30 20:26:18.678: D/NvOsDebugPrintf(124): NvMMDecTVMRDestroyParser Done
10-30 20:26:18.678: D/NvOsDebugPrintf(124): NvMMLiteTVMRDecPrivateClose Done
Run Code Online (Sandbox Code Playgroud)
我无法在不停止的情况下分离视频.我尝试使用SurfaceView或TextureView但没有成功.
我也尝试过寻找第三方视频播放器.我发现了一个商业原因(http://www.vitamio.org/),我出于商业原因无法真正使用它.我找到了一个开源的,去年没有更新过(https://code.google.com/p/dolphin-player/).
我目前只在平板电脑上定位Android 4.2或更高版本. …
以下是我的代码:
package com.example.videoplayer;
import android.app.Activity;
import android.app.ProgressDialog;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.widget.MediaController;
import android.widget.VideoView;
public class VideoPlayerActivity extends Activity {
String TAG = "com.example.VideoPlayer";
ProgressDialog progDailog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video_player);
final VideoView videoView = (VideoView) findViewById(R.id.videoView1);
videoView.setVideoPath("http://www.ebookfrenzy.com/android_book/movie.mp4");
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(videoView);
videoView.setMediaController(mediaController);
videoView.setOnPreparedListener(new
MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
progDailog.dismiss();
Log.i(TAG, "Duration = " + videoView.getDuration());
}
});
videoView.start();
progDailog = ProgressDialog.show(this, "Please wait ...", "Retrieving data …Run Code Online (Sandbox Code Playgroud) 我在RelativeLayout中放了一个ImageView和一个VideoView.可以缩放ImageView以填充整个布局scaleType="fitXY".但是,VideoView没有类似的缩放属性.顺便说一下,我按设置隐藏视频控件setMediaController(null),只显示视频内容.是否可以在不保持纵横比的情况下缩放VideoView?这是布局示例.
<RelativeLayout
android:layout_width="280dp"
android:layout_height="200dp">
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/image"
android:scaleType="fitXY" />
<VideoView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/video"
android:visibility="invisible"
android:layout_centerInParent="true" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud) 我正在构建一个记录和播放视频的应用程序.我想在不影响背景音乐播放的情况下这样做,即如果我开始播放视频,我不想暂停其他应用的音频.但是,在Lollipop上,Android的VideoView类会在VideoView.openVideo()调用私有方法时自动请求音频焦点:
AudioManager am = (AudioManager) super.getSystemService(name);
am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
Run Code Online (Sandbox Code Playgroud)
有关如何绕过这个的任何建议?
我正在使用VideoView显示播放本地mp4,我也使用MediaController.媒体控制栏未显示在我的视频剪辑下方,而是显示在屏幕中间.我使用setAnchorView将它附加到我的videoView,但没有任何影响.我如何定位我的mediacontroller直接在我的视频下?
public class VideoDemo extends Activity {
private VideoView video;
private MediaController ctlr;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(R.layout.main);
File clip=new File(Environment.getExternalStorageDirectory(),
"test.mp4");
if (clip.exists()) {
video=(VideoView)findViewById(R.id.video);
video.setVideoPath(clip.getAbsolutePath());
ctlr=new MediaController(this, false);
ctlr.setAnchorView(video);
ctlr.setMediaPlayer(video);
video.setMediaController(ctlr);
video.requestFocus();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的布局是
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="400dp"
android:layout_height="400dp"
android:background="#fff"
>
<VideoView
android:id="@+id/video"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud) 我有这个代码用于播放视频 VideoView
myVideoView = (VideoView) findViewById(R.id.VideoView);
myVideoView.setVideoURI(Uri.parse(path));
myVideoView.requestFocus();
myVideoView.start();
Run Code Online (Sandbox Code Playgroud)
当视频播放完毕后,我收到消息:"抱歉,此视频无法播放".我想缓存视频播放完毕的那一刻.我怎样才能做到这一点?
这是我的代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video);
Bundle extras = getIntent().getExtras();
path = extras.getString("path");
idPlaylist = extras.getString("idPlaylist");
timer = extras.getString("timer");
myVideoView = (VideoView) findViewById(R.id.VideoView);
myVideoView.setVideoURI(Uri.parse(path));
myVideoView.requestFocus();
myVideoView.start();
myVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
Intent i = new Intent(getBaseContext(),
com.PlayerOrange.ViewPlaylist.class);
i.putExtra("id", idPlaylist);
i.putExtra("timer", timer);
startActivity(i);
finish();
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println("Playing "+myVideoView.isPlaying());
if ((keyCode == KeyEvent.KEYCODE_BACK) && (myVideoView.isPlaying()==true)) {
//nothing …Run Code Online (Sandbox Code Playgroud) 我使用以下库将YouTube视频流式传输到Android应用程序.
我成功地通过3G和Wifi在HTC和摩托罗拉手机上播放视频.但是,在三星Galaxy(Epic 4G)和三星Galaxy II手机上,我只能使用Wifi播放.3G给了我这个错误:"无法播放视频.抱歉,此视频无法播放."
我尝试过强制低质量的YouTube流媒体,但这并没有帮助.我在日志中看到Start()两种情况都被调用(3G/Wifi).这是VideoView的问题吗?有解决方法吗?
编辑2
这些视频来自YouTube API.我尝试使用嵌入式和普通流,以及可用的最低质量流(每个视频不同).此外,我不认为这是一个编码问题,因为相同的视频使用Wifi正确播放.
编辑1
无论使用Wifi还是不使用3G,我都会收到以下输出.
01-30 15:22:38.305: E/MediaPlayer(3831): error (1, -1)
01-30 15:22:38.305: E/MediaPlayer(3831): callback application
01-30 15:22:38.305: E/MediaPlayer(3831): back from callback
01-30 15:22:38.309: E/MediaPlayer(3831): Error (1,-1)
Run Code Online (Sandbox Code Playgroud)
根据这个链接,这些错误意味着以下(我认为):
/*
Definition of first error event in range (not an actual error code).
*/
const PVMFStatus PVMFErrFirst = (-1);
/*
Return code for general failure
*/
const PVMFStatus PVMFFailure = (-1);
/*
/*
Return code for general success
*/
const PVMFStatus PVMFSuccess …Run Code Online (Sandbox Code Playgroud) 我尝试拉伸视频以填充视频.目标是创建在设备中看起来像第一张照片的视图(就像它在布局预览中看起来一样).
这个问题的大多数答案都是指这个链接.
我尝试了这个,但我仍然没有填写视频视图.
这是我的布局代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/search_gren_screen">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/go_back"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="1"
android:onClick="onclick"
android:text="Try again" />
<Button
android:id="@+id/back_to_pick_song"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="Select another song"
android:onClick="onclick" />
<Button
android:id="@+id/btn_continue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:onClick="onclick"
android:text="Amazing, continue!" />
</LinearLayout>
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<VideoView
android:id="@+id/videoView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_gravity="center" />
</FrameLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
在这里,您可以预览我声明的布局:

但是,设备上的结果是不同的:

android ×10
aspect-ratio ×1
audio-player ×1
ffmpeg ×1
scale ×1
scroll ×1
scrollview ×1
streaming ×1
video ×1
vitamio ×1