鸿蒙 视频播放开发(基础文,适合新人) 原创

陈浩南xxx
发布于 2021-4-26 20:36
浏览
2收藏

 

官方指导地址:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/media-video-player-0000000000044178

鸿蒙 视频播放开发(基础文,适合新人)-鸿蒙开发者社区

 

关键步骤 1 player初始化

 player = new Player(getContext());
  • 1.

   2,设置 Source; 视频播放的源(可以是本地,也可以是网络)

     目前只研究到放文件在工程里

   

    private String url = "entry/resources/base/media/gubeishuizhen.mp4";
  

RawFileDescriptor fd = null;
        try {
            fd = getContext().getResourceManager().getRawFileEntry(url).openRawFileDescriptor();
            Source source = new Source(fd.getFileDescriptor(), fd.getStartPosition(), fd.getFileSize());
            player.setSource(source);
        } catch (IOException e) {
            Log.e(TAG, "Exception %s", e.toString());
        }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

3,渲染到SurfaceProvider上

 surfaceProvider = (SurfaceProvider) findComponentById(ResourceTable.Id_surface_provider);
        surfaceProvider.pinToZTop(true);// 不设置这个 画面不显示;

        surfaceProvider.getSurfaceOps().get().addCallback(new SurfaceOps.Callback() {
            @Override
            public void surfaceCreated(SurfaceOps surfaceOps) {
                Log.d(TAG, "surfaceCreated");
                player.setVideoSurface(surfaceOps.getSurface());
                player.prepare();
            }

            @Override
            public void surfaceChanged(SurfaceOps holder, int format, int width, int height) {
                Log.d(TAG, "surfaceChanged format:%d ;width:%d  ;height:%d", format, width, height);
            }

            @Override
            public void surfaceDestroyed(SurfaceOps surfaceOps) {
                Log.d(TAG, "surfaceDestroyed");
            }
        });
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

 

4,player的各种监听回调;

 player.setPlayerCallback(new Player.IPlayerCallback() {
            @Override
            public void onPrepared() {
                Log.d(TAG, "onPrepared");
            }

            @Override
            public void onMessage(int type, int extra) {
                Log.d(TAG, "onMessage type:%d ;extra:%d", type, extra);
            }

            @Override
            public void onError(int errorType, int errorCode) {
                Log.d(TAG, "onError errorType:%d ;errorCode:%d", errorType, errorCode);
            }

            @Override
            public void onResolutionChanged(int width, int height) {
                Log.d(TAG, "onResolutionChanged width:%d ;height:%d", width, height);
            }

            @Override
            public void onPlayBackComplete() {
                Log.d(TAG, "onPlayBackComplete");
            }

            @Override
            public void onRewindToComplete() {
                Log.d(TAG, "onRewindToComplete");
            }

            @Override
            public void onBufferingChange(int percent) {
                Log.d(TAG, "onBufferingChange percent:%d", percent);
            }

            @Override
            public void onNewTimedMetaData(Player.MediaTimedMetaData mediaTimedMetaData) {
                Log.d(TAG, "onNewTimedMetaData");
            }

            @Override
            public void onMediaTimeIncontinuity(Player.MediaTimeInfo mediaTimeInfo) {
                Log.d(TAG, "onMediaTimeIncontinuity");
            }
        });
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.

5,播放,暂停等

  @Override
    public void onClick(Component component) {
        switch (component.getId()) {
            case ResourceTable.Id_play_btn:
                if (player != null) {
                    player.play();
                }
                break;
            case ResourceTable.Id_pause_btn:
                if (player != null) {
                    player.pause();
                }
                break;
        }
    }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

6,时间的更新,用的EventHandler

        EventRunner runner = EventRunner.create(true);
        timeHandler = new TimeHandler(runner);
        sendTimeHandler();

     private class TimeHandler extends EventHandler {

        public TimeHandler(EventRunner runner) throws IllegalArgumentException {
            super(runner);
        }

        @Override
        protected void processEvent(InnerEvent event) {
            super.processEvent(event);
            if (event.eventId == 0) {
                if (player != null && player.isNowPlaying()) {
                    int duration = player.getDuration();
                    int currentTime = player.getCurrentTime();
                    getUITaskDispatcher().syncDispatch(new Runnable() {
                        @Override
                        public void run() {
                            progressBar.setProgressValue(currentTime);
                            progressBar.setMaxValue(duration);
                            durationText.setText(DateUtils.msToString(duration));
                            currentTimeText.setText(DateUtils.msToString(currentTime));
                        }
                    });
                }
            }
            sendTimeHandler();
        }
    }

    private void sendTimeHandler() {
        timeHandler.sendEvent(
            0, 1000, EventHandler.Priority.IMMEDIATE);
    }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.

 

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
标签
已于2021-4-27 09:11:10修改
6
收藏 2
回复
举报
6
5
2
5条回复
按时间正序
/
按时间倒序
张荣超_九丘教育
张荣超_九丘教育

赞赞赞!

回复
2021-4-26 23:56:01
执剑天涯奈我何
执剑天涯奈我何

源码可以发下吗

 

回复
2021-6-9 15:30:23
陈浩南xxx
陈浩南xxx 回复了 执剑天涯奈我何
源码可以发下吗

上面有官方文档,还有就是这么简单的还要源码;那无能为力;

回复
2021-7-8 11:41:36
wx633d375829886
wx633d375829886 回复了 陈浩南xxx
上面有官方文档,还有就是这么简单的还要源码;那无能为力;

那个视频进度的时间是怎么显示的


回复
2022-10-22 15:02:47
陈浩南xxx
陈浩南xxx 回复了 wx633d375829886
那个视频进度的时间是怎么显示的

文章第6段代码说的就是时间如何获取,如何定时,怎么显示在ui上

回复
2022-10-24 10:01:01


回复
    相关推荐