Android 音视频开发——录屏直播,android开发基础在线培训学校

观看手游直播时,我们观众端看到的是选手的屏幕上的内容,这是如何实现的呢?这篇博客将手写一个录屏直播 Demo,实现类似手游直播的效果

获取屏幕数据很简单,Android 系统有提供对应的服务,难点在于传输数据到直播服务器,我们使用 RtmpDump 来传输 Rtmp 数据,由于 RtmpDump 使用 C 语言实现,我们还需要用到 NDK 开发,单单用 Java 无法实现哈,当然如果不怕麻烦的话,还可以自己编译 Ffmpeg 实现 Rtmp 推流,B 站开源的 ijkplayer 播放器也是基于 Ffmpeg 来开发的

实现效果

最终我们推流到 B 站直播间,在直播间能够实时看到我们手机屏幕上的画面

基本流程

  • 获取录屏数据

  • 对数据进行 h264 编码

  • Rtmp 数据包

  • 上传到直播服务器推流地址

获取录屏数据

通过 Intent 获取到 MediaProjectionService,继而获取到 Mediaprojection 的 VirtualCanvas,我们录屏的原始数据就是从中得来的

private void initLive() {

mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);

Intent screenRecordIntent = mediaProjectionManager.createScreenCaptureIntent();

startActivityForResult(screenRecordIntent,100);

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 100 && resultCode == Activity.RESULT_OK) {

//MediaProjection—>产生录屏数据

mediaProjection = mediaProjectionManager.getMediaProjection

(resultCode, data);

}

}

对数据进行 h264 编码

通过 MediaProjection 获取到的 YUV 裸数据,我们先需要对其进行 h264 编码,此时我们使用原生 MediaCodec 进行硬件编码

public void start(MediaProjection mediaProjection){

this.mediaProjection = mediaProjection;

// 配置 MediaCodec

MediaFormat mediaFormat = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VID

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值