Android设备一对多录屏直播——(音视频采集,Tcp传输)

本文介绍了Android设备一对多录屏直播的实现,包括音视频采集和TCP数据传输的详细步骤。视频采集涉及MediaProjection、VideoMediaCodec,音频采集涉及AudioRecord、AudioMediaCodec。数据传输部分讲解了TCP长连接的建立,以及如何通过头部信息进行数据解析和播放。文章还提到了延迟优化的后续描述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载请注明出处:https://blog.youkuaiyun.com/sunmmer123

上篇把关于设备连接这块说完了,主要就是采用UDP连接这种方式,只要在同组地址下,多台客户端能自动连接上播放端,这就适应我这个一对多的投屏场景;接下来我会详细的说一下我传输的步骤。

上篇:Android设备一对多录屏直播(Udp设备连接)
https://blog.youkuaiyun.com/sunmmer123/article/details/82734245

Demo下载地址:
采集端——ScreenImage
播放端——ScreenImagePlay

在这里插入图片描述


讲代码

音视频采集

  • 这里关于音视频采集,我大致的说下,到时候细节大家看代码
  1. 视频采集
    (1)MediaProjection获得 VirtualDisplay。
    (2)建立一个VideoMediaCodec,获得MediaCodec的InputSurface,将InputSurface设置给Virtual。
    (3)读取VideoMediaCodec里产生的视频数据,参考H264解析规则,获得Sps,Pps,和每一个帧具体信息,第一帧前,一定要加Sps,Pps(否则无法解析),并保证第一帧是关键帧.

视频采集这块需要注意的点:
传输H264的裸流的需要格式为:Sps + Pps + IDR + ……. + Sps + Pps + IDR + …
在视频这块需要做的处理是手动的把h264的头部给加上,同时确保视频最开始是sps,pps。

  1. 音频采集
    (1)获取AudioRecord,从AudioRecord中获取pcm。
    (2)建立AudioMediaCodec,将pcm转码为AAC(从AudioRecord中获取的是AAC裸流)给AAC数据添加ADTS头消息,顺道添加(0,0,0,1)头部信息,方便分割。

音频采集这块需要注意的点:给编码出的aac裸流添加adts头字段
这个关于音视频采集具体注意点的解释可以看我篇一推荐的那俩篇博文
这里我主要做了一个 找出采集频率对应下标的处理,动态的去查匹配。

// TODO: 2018/6/5 找出采集频率对应下标
 private int getFrequencyIdx(int defaultFrequency) {
    Map<Integer, Integer> samplingFrequencyIndexMap = new HashMap<>();
    samplingFrequencyIndexMap.put(96000, 0);
    samplingFrequencyIndexMap.put(88200, 1);
    samplingFrequencyIndexMap.put(64000, 2);
    samplingFrequencyIndexMap.put(48000, 3);
    samplingFrequencyIndexMap.put(44100, 4);
    samplingFrequen
评论 55
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值