Skip to main content

媒体中心教程

1. 概述

新媒体中心,支持多码流播放,启动播放、暂停播放、恢复播放、终止播放,找飞机预录制, 获取实时码流信息。

2. 流程图

启动播放、终止播放、找飞机预录制的流程图

3. 新媒体中心API说明

3.1 多码流播放器

3.1.1 多码流播放器说明

支持多码流同时播放(红外、可见光等),支持启动播放、暂停播放、恢复播放、终止播放。

3.1.2 多码流播放器API说明

使用AutelPlayerManager这个类的单实例及AutelPlayer、AutelPlayerView类的实例来调用接口。

AutelPlayerManager.java相关接口说明


/**
* AutelPlayerManager的单例类对象
*/
public synchronized static AutelPlayerManager getInstance()

/**
* 初始化方法
* @param cxt 上下文Context
* @param bDroneCenter 布尔值,是否为无人机中心
*/
public void init(Context cxt, boolean bDroneCenter)

/**
* 注册流数据监听器
*/
public void registerStreamDataListener()

/**
* 取消注册流数据监听器
*/
public void unregisterStreamDataListener()

/**
* 开始视频流传输
* @param port 流通道ID
*/
public void startStreamChannel(int port)

/**
* 结束视频流传输
* @param port 流通道ID
*/
public void endStreamChannel(int port)

/**
* 添加AutelPlayer实例到mAutelPlayerList中
*
* @param player 要添加的AutelPlayer实例
*/
public void addAutelPlayer(AutelPlayer player)

/**
* 释放/移除所有播放器
*/
public void release()

/**
* 添加MediaCodec监听器
* @param key 键值
* @param callbackWith 回调接口OnRenderFrameInfoListener
*/
public void addCodecListeners(String key, final OnRenderFrameInfoListener callbackWith)

AutelPlayer.java相关接口说明


/**
* 构造方法
* @param playerID 玩家(播放器)ID
*/
public AutelPlayer(int playerID)

/**
* 添加用于视频的视图
* @param view AutelPlayerView对象,用于显示视频的视图
*/
public void addVideoView(AutelPlayerView view)

/**
* 移除视频视图
*/
public void removeVideoView()

/**
* 设置视频流监听器
* @param ls 实现了IVideoStreamListener接口的监听器对象
*/
public void setVideoInfoListener(IVideoStreamListener ls)


/**
* 暂停解码、显示灰色界面
*/
public void pauseVideo()

/**
* 恢复解码、显示彩色界面
*/
public void resuemeVideo()

/**
* 释放各线程资源
*/
public void releasePlayer()

AutelPlayerView.java相关接口说明


/**
* 创建一个新的AutelPlayerView视图。
*
* @param context 与该视图关联的上下文Context。
*/
public AutelPlayerView(Context context)

/**
* 创建一个新的AutelPlayerView视图。
*
* @param context 与该视图关联的上下文Context。
* @param attrs 用于填充该视图的XML标签的属性。
*/
public AutelPlayerView(Context context, AttributeSet attrs)

3.1.3 多码流播放器接口调用实例

//播放器管理单实例初始化
AutelPlayerManager.getInstance().init(ctx, false)

//注册码流接收监听
override fun onResume() {
......
AutelPlayerManager.getInstance().registerStreamDataListener()
......
}

//开启接收码流的通道
AutelPlayerManager.getInstance().startStreamChannel(getPlayerId())

//创建播放TextureView
val codecView = AutelPlayerView(activity)
uiBinding.root.addView(codecView, 0)

//创建播放器AutelPlayer
mAutelPlayer = AutelPlayer(getPlayerId())

//把播放TextureView传入播放器
mAutelPlayer?.addVideoView(codecView)

//设置码流信息回调接口
mAutelPlayer?.setVideoInfoListener(mVideoStreamListener)

//把创建的播放器添加到播放器列表
AutelPlayerManager.getInstance().addAutelPlayer(mAutelPlayer)

//启动播放器各线程资源
mAutelPlayer?.startPlayer()

//暂停播放
override fun onPause() {
......
mAutelPlayer?.pauseVideo()
......
}
//恢复播放
override fun onResume() {
......
mAutelPlayer?.resuemeVideo()
......
}

//把播放TextureView从播放器里移除
mAutelPlayer?.removeVideoView()

//关闭接收码流通道
AutelPlayerManager.getInstance().endStreamChannel(getPlayerId())

//释放播放器里各线程资源
mAutelPlayer?.releasePlayer()

//从播放器列表里移除播放器
AutelPlayerManager.getInstance().removeAutelPlayer(mAutelPlayer)

//取消码流接收监听,移除播放器列表里所有的播放器
override fun onDestroy() {
......
AutelPlayerManager.getInstance().unregisterStreamDataListener()
AutelPlayerManager.getInstance().release()
......
}

3.2 找飞机预录制

3.2.1 找飞机预录制说明

当开启了找飞机预录制,会每次录制大约30秒的内容,就会保存为一个固定名字文件并覆盖之前的保存的文件,这样总能保留飞机最近30秒的视频内容,如果飞机失联,则可以利用这个视频内容来协助找到飞机。

3.2.2 找飞机预录制API说明

找飞机预录制AutelPlayerManager这个类的单实例的API如下所示。

/**
* 开启对应视频类型(可以是可见光、夜视、红外)的录制,最长约30秒,返回true: 启动成功, false:启动失败(传的参数错误)
* @param videoType: the video type
* @param cacheDuration: use ms*/
public boolean openVideoCache(VideoType videoType, long cacheDuration)

/**
* 关闭对应视频类型(可见光、夜视)的录制, 返回true: 关闭成功, false:关闭失败(传的参数错误)
* @param videoType the video type
*/
public boolean closeVideoCache(VideoType videoType)

/**
* 设置保存录制视频的路径,如果不设置就默认保存在根目录
* @param path the video path
*/
public void setCachePath(String path)

/**
* 是否开启对应视频类型(可见光、夜视)的录制
*/
public boolean isOpenVideoCache(VideoType videoType)

3.2.3 找飞机预录接口调用示例代码

//开启30s时光回溯功能
AutelPlayerManager.getInstance().openVideoCache(VideoType.VISIBLE_LIGHT, 30_000)

//关闭30s时光回溯功能
AutelPlayerManager.getInstance().closeVideoCache(VideoType.VISIBLE_LIGHT)

//设置保存录制视频的路径,如果不设置就默认保存在根目录
AutelPlayerManager.getInstance().setCachePath(AutelDirPathUtils.getLookFlightVideoCachePath())

//判断是否开启对应视频类型30s时光回溯功能
AutelPlayerManager.getInstance().isOpenVideoCache(VideoType.VISIBLE_LIGHT)

3.3 获取码流的实时信息

3.3.1 获取码流实时信息说明

可以获取到码流的实时信息,方便调试定位问题。

3.3.2 获取码流实时信息API说明

AutelPlayer类的实例调用接口

//解码帧率
public int getVideoFps()

//接收帧率
public int getRecvFps()

//刷新帧率
public int getRenderFps()

//接收的码率
public int getRecvBitrate()

//60秒内接收到的关键帧数量
public int getKeyFrameNum()

//60秒内请求关键帧次数
public int getKeyFrameReqNum()

//1秒内丢包数
public int getPktLossNum()

//视频的宽度
public int getVideoWidth()

//视频的高度
public int getVideoHeigh()