鴻蒙 視頻播放開發(基礎文,適合新人)


目錄:

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