鸿蒙OS渲染/媒体/视频 原创
BLUESKYHOST
发布于 2021-3-29 10:25
浏览
1收藏
效果图
不要复制粘贴把文件素材改成自己的ID也要改成自己的,RpxUtil.rpx 是我自己写的UI适配插件用来适配各种屏幕的。
第一步在需要显示视频的地方添加视频容器组件
<SurfaceProvider
ohos:id="$+id:money_list_media_player"
ohos:width="match_parent">
</SurfaceProvider>
编码实现
第二步 创建播放器
全局定义一个播放器
private static Player player;
player=new Player(getContext());
第三步创建视频相关的回调方法
//播放处死哈
private void playLocalFile(Surface surface) {
try {
RawFileDescriptor filDescriptor = getResourceManager().getRawFileEntry("resources/rawfile/mediamp4.mp4").openRawFileDescriptor();
Source source = new Source(filDescriptor.getFileDescriptor(),filDescriptor.getStartPosition(),filDescriptor.getFileSize());
player.setSource(source);
player.setVideoSurface(surface);
player.setPlayerCallback(new VideoPlayerCallback());
player.prepare();
sfProvider.setTop(0);
// player.play();
} catch (Exception e) {
e.printStackTrace();
}
}
//视频加载回调
private class VideoSurfaceCallback implements SurfaceOps.Callback {
@Override
public void surfaceCreated(SurfaceOps surfaceOps) {
HiLog.info(logLabel,"surfaceCreated() called.");
if (sfProvider.getSurfaceOps().isPresent()) {
Surface surface = sfProvider.getSurfaceOps().get().getSurface();
playLocalFile(surface);
}
}
@Override
public void surfaceChanged(SurfaceOps surfaceOps, int i, int i1, int i2) {
HiLog.info(logLabel,"surfaceChanged() called.");
}
@Override
public void surfaceDestroyed(SurfaceOps surfaceOps) {
HiLog.info(logLabel,"surfaceDestroyed() called.");
}
}
//视频播放回调
private class VideoPlayerCallback implements Player.IPlayerCallback {
@Override
public void onPrepared() {
HiLog.info(logLabel,"onPrepared");
}
@Override
public void onMessage(int i, int i1) {
HiLog.info(logLabel,"onMessage");
}
@Override
public void onError(int i, int i1) {
HiLog.info(logLabel,"onError: i=" + i + ", i1=" + i1);
}
@Override
public void onResolutionChanged(int i, int i1) {
HiLog.info(logLabel,"onResolutionChanged");
}
@Override
public void onPlayBackComplete() {
HiLog.info(logLabel,"onPlayBackComplete");
if (player != null) {
player.stop();
player = null;
}
}
@Override
public void onRewindToComplete() {
HiLog.info(logLabel,"onRewindToComplete");
}
@Override
public void onBufferingChange(int i) {
HiLog.info(logLabel,"onBufferingChange");
}
@Override
public void onNewTimedMetaData(Player.MediaTimedMetaData mediaTimedMetaData) {
HiLog.info(logLabel,"onNewTimedMetaData");
}
@Override
public void onMediaTimeIncontinuity(Player.MediaTimeInfo mediaTimeInfo) {
HiLog.info(logLabel,"onMediaTimeIncontinuity");
}
}
第四步调用视频渲染
//这个是全局的跟上面的播放器一样
private SurfaceProvider sfProvider;
sfProvider =(SurfaceProvider) findComponentById(ResourceTable.Id_money_list_media_player);
sfProvider.getSurfaceOps().get().addCallback(new VideoSurfaceCallback());
sfProvider.pinToZTop(true);
sfProvider.setWidth(ComponentContainer.LayoutConfig.MATCH_PARENT);
sfProvider.setHeight((int) RpxUtil.rpx(350,getContext()));
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2021-4-13 15:24:00修改
赞
5
收藏 1
回复
相关推荐
666
视频播放了,画面不动是什么情况