阿里短视频Android接入教程,视频合并

//创建实例

AliyunIMixComposer mixComposer = AliyunMixComposerCreator.createMixComposerInstance();

//创建轨道1

AliyunMixTrackLayoutParam track1Layout = new AliyunMixTrackLayoutParam.Builder()

.centerX(0.25f)

.centerY(0.5f)

.widthRatio(0.5f)

.heightRatio(1.f)

.build();

// 创建轨道1的第一个视频流1

AliyunMixStream stream11 = new AliyunMixStream

.Builder()

.displayMode(VideoDisplayMode.FILL)

.filePath("/storage/emulated/0/11.mp4")

.streamEndTimeMills(20000)

.build();

//添加该视频流到轨道1

track1.addStream(stream11);

//创建轨道1的第二个视频流

AliyunMixStream stream12 = new AliyunMixStream

.Builder()

.displayMode(VideoDisplayMode.FILL)

.filePath("/storage/emulated/0/12.mp4")

.streamEndTimeMills(20000)

.build();

//添加该视频流到轨道1

track1.addStream(stream12);

//创建轨道2

AliyunMixTrackLayoutParam track2Layout = new AliyunMixTrackLayoutParam.Builder()

.centerX(0.75f)

.centerY(0.5f)

.widthRatio(0.5f)

.heightRatio(1.f)

.build();

//创建轨道2的第一个视频

AliyunMixStream stream21 = new AliyunMixStream

.Builder()

.displayMode(VideoDisplayMode.FILL)

.filePath("/storage/emulated/0/21.mp4")

.streamEndTimeMills(20000)

.build();

//添加该视频流到轨道2

track2.addStream(stream21);

//创建轨道2的第二个视频

AliyunMixStream stream22 = new AliyunMixStream

.Builder()

.displayMode(VideoDisplayMode.FILL)

.filePath("/storage/emulated/0/22.mp4")

.streamEndTimeMills(20000)

.build();

//添加该视频流到轨道2

track2.addStream(stream22);

//配置输出参数

AliyunMixOutputParam outputParam = new AliyunMixOutputParam.Builder()

.outputPath("/sdcard/output.mp4")

.outputAudioReferenceTrack(track2)//表示使用轨道2的音频作为最后的音频,目前音频轨道只支持一个音频流,因此轨道2第二个视频的音频流不会加进去。

.outputDurationReferenceTrack(track2)//表示使用轨道2的时长作为最后输出视频的时长,如果轨道1的时长不够,则会停在最后一帧

.crf(6)

.videoQuality(VideoQuality.HD)

.outputWidth(720)

.outputHeight(1280)

.fps(30)

.gopSize(30)

.build();

mixComposer.setOutputParam(outputParam);

//开始合成

AliyunMixCallback callback = new AliyunMixCallback() {

@Override

public void onProgress(long progress) {//合成进度

Log.e("MixRecord", "onProgress " + progress);

}

@Override

public void onComplete() {

Log.e("MixRecord", "onComplete");

runOnUiThread(new Runnable() {

@Override

public void run() {

//该接口一定不能在回调的线程中直接调用!!!

mixComposer.release();

}

});

}

@Override

public void onError(int errorCode) {

Log.e("MixRecord", "onError " + errorCode);

}

};

mixComposer.start(callback);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值