# SimpleVideoPlayer **Repository Path**: cxshu/simple-video-player ## Basic Information - **Project Name**: SimpleVideoPlayer - **Description**: HarmonyOS实现的最简单的视频播放器 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-04-26 - **Last Updated**: 2023-02-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SimpleVideoPlayer ![输入图片说明](https://images.gitee.com/uploads/images/2021/0426/175452_250d760c_2252261.jpeg "1.jpg") #创建播放控件 ``` // 创建SurfaceProvider实例 surfaceView = new SurfaceProvider(this); // 设置播放控件的回调函数 surfaceView.getSurfaceOps().get().addCallback(surfaceCallback); surfaceView.pinToZTop(false); // 设置视频窗口是否显示在最前面 ``` 设置顶层窗体透明,不设置窗体透明会挡住播放内容,除非设置pinToZTop为true 当pinToZTop为true时,视频窗口显示在最前面,其他控件无法显示 当pinToZTop为false时, 视频窗口不会显示在最前面,支持其他控件(如进度条,播放时间等)与视频播放页面同时显示,但需要保证其他控件与SurfaceProvider在同一layout下, 并且不能设置背景 `WindowManager.getInstance().getTopWindow().get().setTransparent(true);` 将播放控件装到布局中 ``` videoLayout = (DirectionalLayout)findComponentById(ResourceTable.Id_video_layout); videoLayout.addComponent(surfaceView); ``` 创建本地播放器 ``` player = new Player(this); // 创建Plaer实例 String url = "entry/resources/base/media/movie.mp4"; // 视频路径 // 原始文件描述符 RawFileDescriptor fd = getResourceManager().getRawFileEntry(url).openRawFileDescriptor(); // 通过原始文件描述符(RawFileDescriptor) 读取文件(getFileDescriptor),文件起始位置(getStartPosition),文件长度(getFileSize) // 构造数据源对象 Source source = new Source(fd.getFileDescriptor(), fd.getStartPosition(), fd.getFileSize()); player.setSource(source); // 设置媒体源 player.setPlayerCallback(callback); // 设置Player的回调函数 ``` 播放控件SurfaceProvider的回调函数 ``` private SurfaceOps.Callback surfaceCallback = new SurfaceOps.Callback() { @Override public void surfaceCreated(SurfaceOps holder) { // 创建视频窗口时回调 isSurfaceViewCreate = true; // 获取播放视频的窗口 surface = holder.getSurface(); start(); // 调用播放函数 } @Override public void surfaceChanged(SurfaceOps surfaceOps, int i, int i1, int i2) {} @Override public void surfaceDestroyed(SurfaceOps surfaceOps) {} }; ``` 播放函数(自定义) ``` private void start() { if (isSurfaceViewCreate) { player.setVideoSurface(surface); // 设置播放视频的窗口 player.prepare(); player.rewindTo(0); // 设置播放位置 player.play(); } } ``` Player的回调函数 ``` Player.IPlayerCallback callback = new Player.IPlayerCallback() { @Override public void onPrepared() { HiLog.info(LABEL, "prepared"); } @Override public void onError(int i, int i1) { // 播放出错后的操作 HiLog.info(LABEL, "onError"); } @Override public void onPlayBackComplete() { // 播放完成后的操作 if (player != null) { player.stop(); player = null; } } }; ```