Xamarin android:VideoView不调用SurfaceCreated
我正努力用VideoView和MediaPlayer播放来自资产的视频 构建版本:安卓6.0.1棉花糖API 23 调试设备:NVIDIA屏蔽板K1 问题:我的VideoView似乎没有创建曲面,因为在调试期间从未调用函数“SurfaceCreated” 实际结果:加载活动时,屏幕呈灰色,我可以听到视频的正确声音 这是我的密码:Xamarin android:VideoView不调用SurfaceCreated,android,user-interface,video,xamarin,Android,User Interface,Video,Xamarin,我正努力用VideoView和MediaPlayer播放来自资产的视频 构建版本:安卓6.0.1棉花糖API 23 调试设备:NVIDIA屏蔽板K1 问题:我的VideoView似乎没有创建曲面,因为在调试期间从未调用函数“SurfaceCreated” 实际结果:加载活动时,屏幕呈灰色,我可以听到视频的正确声音 这是我的密码: public class VideoTestActivity : Activity, MediaPlayer.IOnPreparedListener, ISurface
public class VideoTestActivity : Activity, MediaPlayer.IOnPreparedListener, ISurfaceHolderCallback
{
MediaPlayer player;
VideoView _myVideoView;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.VideoTest);
player = new MediaPlayer();
_myVideoView = FindViewById<VideoView>(Resource.Id.video);
_myVideoView.Start();
_myVideoView.SetZOrderOnTop(true); // tried from Q&A, display a grey screen
var descriptor = Assets.OpenFd("video.mp4");// the data is correctly loaded
player.SetDataSource(descriptor.FileDescriptor, descriptor.StartOffset, descriptor.Length);
player.Prepare();
player.Start();
}
public void OnPrepared(MediaPlayer mp)
{
throw new NotImplementedException();
}
public void SurfaceChanged(ISurfaceHolder holder, [GeneratedEnum] Format format, int width, int height)
{
throw new NotImplementedException();
}
public void SurfaceCreated(ISurfaceHolder holder)
{
player.SetDisplay(_myVideoView.Holder); // never called
}
public void SurfaceDestroyed(ISurfaceHolder holder)
{
throw new NotImplementedException();
}
}
公共类VideoTestActivity:Activity,MediaPlayer.IOnPreparedListener,ISurfaceHolderCallback
{
媒体播放器;
VideoView(我的VideoView);
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.VideoTest);
player=新媒体播放器();
_myVideoView=findviewbyd(Resource.Id.video);
_myVideoView.Start();
_myVideoView.SetZOrderOnTop(true);//从问答中尝试,显示灰色屏幕
var descriptor=Assets.OpenFd(“video.mp4”);//数据已正确加载
SetDataSource(descriptor.FileDescriptor,descriptor.StartOffset,descriptor.Length);
player.Prepare();
player.Start();
}
已准备好公开作废(MediaPlayer mp)
{
抛出新的NotImplementedException();
}
public void surfacechange(ISurfaceHolder持有人,[GeneratedEnum]格式,整数宽度,整数高度)
{
抛出新的NotImplementedException();
}
已处理的公共空隙表面(ISurfaceHolder)
{
player.SetDisplay(_myVideoView.Holder);//从未调用
}
公共空隙表面置换(ISurfaceHolder)
{
抛出新的NotImplementedException();
}
}
这是我的axml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:p1="http://schemas.android.com/apk/res/android"
p1:minWidth="25px"
p1:minHeight="25px"
p1:layout_width="match_parent"
p1:layout_height="match_parent"
p1:id="@+id/relativeLayout1">
<VideoView
p1:layout_width="fill_parent"
p1:layout_height="fill_parent"
p1:id="@+id/video"/>
</RelativeLayout>
我尝试/检查的内容:
- 我的视频视图的宽度/高度与0不同
- 描述符已正确加载
- 在Start()之后调用了SetZOrderOnTop()
- FindViewById()已正确加载视频视图
感谢您的时间和知识。好的,我终于找到了播放视频的解决方案,但没有找到加载曲面的解决方案 创建原始文件夹是解决方案 这是新代码(上一个字段中的其他字段为空):
即使原始问题没有得到回答,我也会关闭主题。好的,所以我最终找到了播放视频的解决方案,但没有找到加载曲面的解决方案 创建原始文件夹是解决方案 这是新代码(上一个字段中的其他字段为空): 即使最初的问题没有得到回答,我也结束了话题
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.VideoTest);
VideoView view = (VideoView)FindViewById(Resource.Id.videoPacificRim);
String path = "android.resource://" + PackageName + "/" + Resource.Raw.pacificrim_file;
view.SetVideoURI(Android.Net.Uri.Parse(path));
view.Start();
}