帮助与文档

> >

在默认情况下ShareREC会将录制的视频存入mp4文件,然而考虑到需求的多变,自1.5.0版以后,我们加入了自定义视频输出方式的支持,其使用方法列述如下:

一、添加集成

首先,创建一个类,使其继承自“cn.sharerec.recorder.MediaOutput”,并实现抽象方法。如:

public class MiniRTSPServer extends MediaOutput {
	
	/** 此方法于录像开始时被回调 */
	public void onStart() {
		
	}

	/** 此方法于录像暂停时被回调 */
	public void onPause() {
		
	}
	
	/** 此方法于录像恢复时被回调 */
	public void onResume() {
		
	}
	
	/** 此方法于录像停止时被回调 */
	public void onStop() {
		
	}
	
	/** 每组pcm样本被编码为aac以后就会回调本方法,其中第一次回调时传入的是aac的esds信息 */
	public void onAudio(Buffer buffer, int size, long presentationTimeUs, int flag) {
		
	}
	
	/** 每帧图片被编码为h264以后就会回调本方法,其中第一次回调时传入的是h264的sps和pps信息 */
	public void onVideo(Buffer buffer, int size, long presentationTimeUs, int flag) {
		
	}
}

其次,通过ShareREC获取具体游戏引擎下的Recorder实例,如:

// 以libGDX为例
LibGDXRecorder recorder = mySrecGDXGame.getRecorder();

最后,将MediaOutput的子类实例设置给Recorder实例:

recorder.setMediaOutput(output);

二、方法说明

MediaOutput的onStart、onPause、onResume、onStop对应着Recorder的工作周期,在Recorder切换状态时被调用。继承时并不一定都要处理,可根据具体业务而定。

onAudio和onVideo会在Recorder开始后回调每一帧音频和视频数据,多数格式为aac和h264。但是其各自的第一帧都是配置帧,音频对应的是esds信息,视频对应的是sps+pps信息。这两个方法里的buffer参数都是ByteBuffer类型、size表示buffer中数据的字节数,presentationTimeUs表示输入编码器时的时间(单位:微妙),flag表示当前帧的类型,有三个取值:

	public static final int FLAG_P_FRAME = 0;
	public static final int FLAG_KEY_FRAME = 1;
	public static final int FLAG_CODEC_CONFIG = 2;

分别表示P帧、I帧和配置帧。视频轨道有所有类型,音频轨道没有P帧类型。

三、其它信息

MediaOutput默认还携带了视频的高、宽,音频的采样率和声道数等信息。可以通过实例字段获取:

	protected int width;
	protected int height;
	protected int sampleRate;
	protected int channels;

由于录屏时无法确保视频的帧率,所以事先获取编码器帧率是没有意义的。

相关文档