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


目录:

1、player初始化

2、设置source

3、渲染到SurfaceProvider上

4、player的各种监听回调

5、播放,暂停等

6、时间的更新

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

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

 

关键步骤 1 player初始化

 player = new Player(getContext());

 

   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()); }

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"); } });

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"); } });

 

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; } }

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); }

作者:陈浩南xxx

想了解更多内容,请访问51CTO和华为合作共建的鸿蒙社区:https://harmonyos.51cto.com


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM