安卓手机投屏直播直播投屏软件用哪个

Android之间互相的投屏直播 --点对点传输(tcp长连接发送h264)
之间互相的投屏直播 --点对点传输(tcp长连接发送h264)。这个只能算是一个初级demo. 有一定延时,只记录下自己学习的过程.偏向于学习.
另外,本人才疏学浅,,如有各种理解错误,还望各位大神指出&
把这个调研过程分为4部分,
(1),简单的了解h264的数据结构.
(2),学习来疯直播的代码,在来疯的架构上添加点对点传输代码.
(3),tcp传输的交互过程.
(4),实时播放h264数据.
- 1,h264的数据结构
1,关于sps和pps: 根据Android develZ喎"/kf/ware/vc/" target="_blank" class="keylink">vcMnPtcTD6Mr2LLzytaW4xcCoOnNwc8rH0PLB0LLOyv28ryhTZXF1ZW5jZSBQYXJhbWV0YXI8YnIgLz4NClNldHMpLHBwc8rHzbzGrLLOyv28ryhQaWN0dXJlIFBhcmFtZXRhciBTZXRzKTwvcD4NCjxwPjIsudjT2klEUtahOjwvcD4NCjxwPknWoTrWocTaseDC69ahysfSu9bW19S0+Mirsr/Qxc+itcS2wMGi1qGjrM7e0Oiyzr+8xuTL/M28z/Gx47/JtsDBor340NC94sLro6zK08a10PLB0NbQtcS12tK7uPbWocq81tW2vMrHSdahLjxiciAvPg0KSURS1qE6IEm6zUlEUtahtrzKx8q508PWocTa1KSy4rXEoaPL/MPHtrzKx82s0ru49rarzve2+NLRLNTaseDC67rNveLC69bQzqrBy7e9seOjrNKqyte49knWobrNxuTL+0nWocf4sfC/qizL+dLUssWw0bXa0ru49srXuPZJ1qG90ElEUqOs1eLR+b7Nt72x47/Y1sax4MLrus294sLrwfezzKGjPGJyIC8+DQpJRFLWobXE1/fTw8rHwaK/zMui0MIsyrm07c7zsrvWwrSrsqUstNNJRFLWob+qyrws1tjQwsvj0ru49tDCtcTQ8sHQv6rKvLHgwuuho7b4Sdahsru+39PQy+a7+rfDzsq1xMTcwaajrNXiuPa5psTcysfTyUlEUrPQtaOhozwvcD4NCjxwPtfcveE6Sdahvs3Kx9K7uPa8x8K8wcvNvMasyKXIq7K/0MXPorXE1qEstvhJRFLWobK7vfa8x8K8wcvNvMastcTIq7K/0MXPoiy2+MfSsqW3xcb3veLO9rW9SURS1qHKsbvhuPm+3cXk1sPQxc+iwaK/zMui0MIuscjI59axsqW5/bPM1tAstbGx4MLrxve1xNahtcSzpL/tt6LJ+rHku68syOe5+9bQvOTDu9PQSURS1qEssqW3xcb3vs274bzM0PiwtLTtzvO1xMXk1sPQxc+iveLC6yy007b4srvE3NX9yLe1xL3izvbK/b7dLjwvcD4NCjxwPjMsQW5kcm9pZCBNZWRpYUNvZGVjsvrJ+rXEaDI2NMr9vt08YnIgLz4NCr6tyrW8ymRlYnVnsuLK1CxBbmRyb2lksvrJ+rXEw7/Su7j2bmFsysfS1CgweDAwLDB4MDAsMHgwMCwweDAxKb+qzbe1xCwo09DOxNXCy7Ug1eLKx1JUUDxiciAvPg0KuPHKvbXESDI2NLXEzNjV9yzOtMTcyLe2qCkuLjwvcD4NCjxwPrj5vt2y6dGv18rBz7XD1qo6PGJyIC8+DQpTcHMgv6rNt6G+MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2N6G/PGJyIC8+DQpQcHMgv6rNt6G+MHgwMCwweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY4ob88YnIgLz4NCklEUiC/qs23ob4weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLDB4NjWhvzwvcD4NCjxwPrj5vt3AtLfo1rGypdbQtcTF0LbPzPW8/rXD1qo6wLS36NbQtcRLZXlGcmFtZSC8yNa4SURS1qEuPC9wPg0KPHByZSBjbGFzcz0="brush:">
private boolean isKeyFrame(byte[] frame) {
if (frame.length & 1) {
// 5bits, 7.3.1 NAL unit syntax,
// H.264-AVC-ISO_IEC_14496-10.pdf, page 44.
7: SPS, 8: PPS, 5: I Frame, 1: P Frame
int nal_unit_type = (frame[0] & 0x1f);
return nal_unit_type == IDR;
4,我们需要的数据格式: 根据以上描述,我们可以得知,如果点对点传输H264的裸流的话,需要的数据格式如下:
Sps + Pps + IDR + &&. + Sps + Pps + IDR + &
经过查看来疯打包flv的代码,我们做出如下修改&(手动把h264的头部给加回去,可能有更优的算法可以实现,也在学习研究&)
private byte[] header = {0x00, 0x00, 0x00, 0x01};
public void analyseVideoDataonlyH264(ByteBuffer bb, MediaCodec.BufferInfo bi) {
bb.position(bi.offset);
bb.limit(bi.offset + bi.size);
ArrayList frames = new ArrayList&&();
boolean isKeyFrame =
while (bb.position() & bi.offset + bi.size) {
byte[] frame = annexbDemux(bb, bi);
if (frame == null) {
SopCastLog.e(SopCastConstant.TAG, &annexb not match.&);
// ignore the nalu type aud(9)
if (isAccessUnitDelimiter(frame)) {
// for pps
if (isPps(frame)) {
// for sps
if (isSps(frame)) {
// for IDR frame
if (isKeyFrame(frame)) {
isKeyFrame =
isKeyFrame =
frames.add(header);//本来是加flv的头,改为加h264的头
frames.add(frame);
if (mPps != null && mSps != null && mListener != null && mUploadPpsSps) {
if (mListener != null) {
mListener.onSpsPps(mSps, mPps);
mUploadPpsSps =
if (frames.size() == 0 || mListener == null) {
int size = 0;
for (int i = 0; i & frames.size(); i++) {
byte[] frame = frames.get(i);
size += frame.
byte[] data = new byte[size];
int currentSize = 0;
for (int i = 0; i & frames.size(); i++) {
byte[] frame = frames.get(i);
System.arraycopy(frame, 0, data, currentSize, frame.length);
currentSize += frame.
if (mListener != null) {
mListener.onVideo(data, isKeyFrame);
2,在来疯直播的基础上添加逻辑:
1,来疯直播执行流程:
数据采集 -& 打包 -&进入缓存队列 -&发送
看了流程,想必大家已经知道,我们需要修改,打包和发送两个环节.好在来疯的架构是特别好的,我们可以很方便的实现来疯的Packer和Sender接口,
自定义逻辑来满足我们自己的需求.
2,实现TcpPacker,
如果回调Sps,Pps则发送,
如果回调的帧是IDR帧,则在前面加上Sps和Pps..
public void onSpsPps(byte[] sps, byte[] pps) {
ByteBuffer byteBuffer = ByteBuffer.allocate(sps.length + pps.length + 8);
byteBuffer.put(header);
byteBuffer.put(sps);
byteBuffer.put(header);
byteBuffer.put(pps);
mSpsPps = byteBuffer.array();
packetListener.onSpsPps(mSpsPps);
// onSpsPps()回调没有参与发送逻辑,想要发送这些信息需要回调onPacket();
packetListener.onPacket(mSpsPps, HEADER);
isHeaderWrite =
public void onVideo(byte[] video, boolean isKeyFrame) {
if (packetListener == null || !isHeaderWrite) {
int packetType = INTER_FRAME;
if (isKeyFrame) {
isKeyFrameWrite =
packetType = KEY_FRAME;
//确保第一帧是关键帧,避免一开始出现灰色模糊界面
if (!isKeyFrameWrite) {
if (isKeyFrame) {
bb = ByteBuffer.allocate(4 + video.length + mSpsPps.length);
bb.put(mSpsPps);
bb.put(video);
bb = ByteBuffer.allocate(4 + video.length );
bb.put(video);
packetListener.onPacket(bb.array(), packetType);
3,实现TcpSender:
没有什么特别注意的,就是一个普通的Tcp连接
3,tcp传输:
1,为了传输h264数据,我们需要在两个设备之间建立一个长连接,这里采用ServerSoket,为了确保数据在tcp建立成功后,才开始传输,我自定义了一个逻辑,当播放端初始化成功后,
会给推送端发送一个OK的字符串,而推送端收到OK的字符串后,才会开启发送线程,进行发送数据(有点类似Rtmp的握手)
2,为了保证播放的连贯性:
我们在写某段字节前,会在这段字节前加上字节数组的长度,这样我们就可以保证,播放端每读到一帧数据,就可以立刻把数据写给播放代码..
public class EncodeV1 {
//`发送时加上byte数组长度
private byte[]
//要发送的某一帧的byte数组
public EncodeV1(byte[] buff) {
this.buff =
public byte[] buildSendContent() {
if (buff == null || buff.length == 0) {
ByteBuffer bb = ByteBuffer.allocate(4 + buff.length);
bb.put(ByteUtil.int2Bytes(buff.length));
bb.put(buff);
return bb.array();
//在播放端读取时,先读4个字节获取某一帧的byte数组长度;再根据长度去读字节,值得注意的是一次read很可能读不完指定字节,需要根据已读到的字节长度去判断是否读完,如果没有读完,则需要再次去读指定字节,直到读够为止... readByte()方法就是处理这种情况的.
while (startFlag) {
byte[] length = readByte(InputStream, 4);
if (length.length == 0){
int buffLength = bytesToInt(length);
byte[] buff = readByte(InputStream, buffLength);
listener.acceptBuff(buff);
private byte[] readByte(InputStream is, int readSize) throws IOException {
byte[] buff = new byte[readSize];
int len = 0;
int eachLen = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while (len & readSize) {
eachLen = is.read(buff);
if (eachLen != -1) {
len += eachL
baos.write(buff, 0, eachLen);
if (len & readSize) {
buff = new byte[readSize - len];
byte[] b = baos.toByteArray();
baos.close();
4,实时播放h264数据:
1,我们首先在播放端建立代码结构,(思路如下)
(1), Server去监听端口号 -&
(2),建立长连接 -&
(3),在长连接中根据我们在字节数组前加的标记去读取每一帧数据 -&
(4),将数据放入到一个容器中,容器选择:ArrayBlockQueue,一个自带阻塞的队列,
private ArrayBlockingQueue mPlayQ
private String TAG = &NormalPlayQueue&;
private static final int NORMAL_FRAME_BUFFER_SIZE = 150; //缓存区大小
public NormalPlayQueue() {
mPlayQueue = new ArrayBlockingQueue(NORMAL_FRAME_BUFFER_SIZE, true);
public byte[] takeByte() {
return mPlayQueue.take();
} catch (InterruptedException e) {
Log.e(TAG,&take bytes exception& + e.toString());
public void putByte(byte[] bytes) {
mPlayQueue.put(bytes);
} catch (InterruptedException e) {
Log.e(TAG, &put bytes exception& + e.toString());
(5),遍历容器,将每一帧数据数据写入播放代码中..
播放逻辑参考这位大神的逻辑,修改了一下,每读到一个帧的byte数组,就把字节写进去播放..
调用参考来疯直播的代码,直接创建出TcpPacker,TcpSender
然后把这两个设置给StreamController,
private void startRecord() {
TcpPacker packer = new TcpPacker();
FlvPacker flvPacker = new FlvPacker();
packer.initAudioParams(AudioConfiguration.DEFAULT_FREQUENCY, 16, false);
mVideoConfiguration = new VideoConfiguration.Builder().build();
setVideoConfiguration(mVideoConfiguration);
setRecordPacker(packer);
tcpSender = new TcpSender(ip, port);
tcpSender.setSenderListener(this);
tcpSender.setVideoParams(mVideoConfiguration);
tcpSender.connect();
LocalSender localSender = new LocalSender();
setRecordSender(tcpSender);
startRecording();直播投屏软件哪块最好用无延迟?现在市面上的安卓投屏软件比较多,但是很多延迟比较大,直播的时候用起来非常不爽。最近玩吃鸡的时候发现一个神器非常好用,虽然它主打不爽投屏,但是原理也是把手机投屏到电脑上然后用再电脑来控制手机鼠标键盘玩游戏,我发现用它投屏到电脑的画质很流畅,延迟也比较低,用来直播应该不错,比我之前用过的投屏软件效果好。给大家看看投屏到电脑上的画质图,是不是看起来很爽:
这个神器TC Games主要宣传的其实不是投屏直播,而是电脑玩吃鸡匹配手机,但是用来直播应该不错,唯一的缺点是软件不能传声,只能用传音器插在手机上才能把游戏声音传到电脑.....另外的话我发现这个安卓投屏大师TC DS投屏效果也还行,就是画质亮度比TC Games低一些,并且不能调整(TC Games可以调整亮度),个人不是很喜欢,但是TC DS内存占用比较低,只有几M,也发给大家看看:
终于找到好用的安卓投屏直播软件了,直播吃鸡王者毫无压力
最近主播界各种事件层出不穷啊,从冯提莫会计们,到陈一发儿靖国神社,再骚白代打,亮瞎了我等的双眼。作为一个小主播就先不八卦太多了,来点干货,给大家推荐几款适合直播的投屏工具吧,仅限安卓,苹果都有自带的投...
无需Root实现Android手机屏幕流畅投影到电脑进行演示(附软件下载)
最近要在公司的会议上演示App,需要在投影仪上显示出来给大家演示。由于投影仪不是智能投影仪,只能将App先投影到自己的笔记本上,然后再将笔记本上的内容投影到投影仪上。该App是个游戏,实时交互性比较高...
TC Games问题解答:连接、卡顿、控制视角解决方法,无需安卓模拟器玩手机游戏
tcgames鼠标如何控制视角?tcgames连接不上手机怎么办?tcgames延迟卡顿怎么办?tcgames是一款无需安卓模拟器也可以流畅地在电脑上玩手机游戏的工具。通过将手机安卓或平板高清投屏到电...
好用的手机投屏电脑软件
这篇博客主要介绍一下好用的投屏软件,废话不多说直接上干货
ApowerMirror非常流畅的一款投屏软件,有包括免费版的三个版本,免费版的画质稍差,但流畅性惊人
AirDroid也是非常不错的一款...
SuperVideo,一款直播,点播,投屏并有的app
SuperVideo,一款直播,点播,投屏并有的app
既是手机直播投屏工具又是安卓模拟器?游戏主播和手游玩家都来了解一下
我们都知道很多游戏主播在直播手游的时候首先需要用各种直播投屏工具把游戏投屏到电脑上进行直播,直播一般的MOBA类、策咯类手游还好,手机操作挺方便的。但是比较火的射击吃鸡类手游,像绝地求生系列手游刺激战...
没有更多推荐了,后使用快捷导航没有帐号?
查看: 15509|回复: 1265
在线时间127 小时G币365270 最后登录注册时间帖子阅读权限153UID4764509
TA的每日心情开心 16:15签到天数: 1270 天[LV.10]以坛为家III
G币365270 最后登录注册时间
马上注册,结交更多机友,下载更多应用,让你轻松玩转手机。
已有帐号?   下载游戏和软件,请【】进入机锋市场!
【分享说明】
1,资源发布时,版本是最新的。时过境迁,版本可能不再最新。请善用论坛搜索,及时下载最新版。
2,如果觉得资源对您有用,请加分。如果觉得资源对他人有用,请回帖帮顶。
3,看到新资源,发现新版本,请邮件联系我,注明下载方法。
4,到新浪微博看我,关注资源更新!
【软件下载】
游客,如果您要查看本帖隐藏内容请或者直接 一键安装此应用
【软件资料】软件名称:牛牛看电视
软件ICON:
软件版本:1.4.1最新版
软件大小:13M
软件语言:中文
支持系统:Android 4.4+
测试用机:Galaxy Note8(Android 7.1.1,WQHD+,SnapDragon 835)
【软件详情】
CCTV、湖南卫视、浙江卫视、江苏卫视、韩国KBS、SBS、日本电视台!
提供直播频道上1000个,各地卫视地方台同步直播!
支持投屏到电视机或投影仪,直接为你节省每年300元的有线电视费!
播放清晰流畅不卡顿,秒换频道与线路!
提供自定义频道,看你想看!
精彩节目不错过,支持15天节目全全回看!
清爽无广告!
【软件图片】
14:44 上传
14:44 上传
14:44 上传
14:44 上传
14:44 上传
14:44 上传
【免责声明】
① 本软件源自互联网,只做参考学*用途,请勿在未经本软件版权所有者书面授权的情况下用于商业用途。
② 如果您喜欢本软件并准备长期使用,请购买正版,支持软件开发者继续改进和增强本软件的功能。
③ 本软件不保证能兼容和适用于所有 Android 平台和系统,有可能引起冲突和导致不可预测的问题出现,请自行承担使用本软件而导致的风险和后果,发布者本人不对使用此软件负任何责任!
④ 转载本软件,请注明作者及出处,
⑤ 如果您是本游戏或软件的开发者,反感本作品被分享或修改,或涉及版权等问题请电邮至
通知本人以便及时处理,如不能及时给您反馈请联系管理员邮箱
IF YOU THINK WE VIOLATE YOUR RIGHTS ON YOUR APPLICATION, PLEASE E-MAIL
, WE'LL RESPONSE ASAP.
单选投票, 共有 29 人参与投票
1. &喜欢本资源
37.93% (11)
2. &不喜欢本资源
10.34% (3)
3. &试试看
51.72% (15)
您所在的用户组没有投票权限
不断创造精彩,永远奉献经典!请联系!
在线时间44 小时G币16 最后登录注册时间帖子阅读权限30UID419143
初中生, 积分 70, 距离下一级还需 30 积分
该用户从未签到
G币16 最后登录注册时间
有没有新版本啊!!
在线时间0 小时G币56 最后登录注册时间帖子阅读权限20UID
小学生, 积分 42, 距离下一级还需 8 积分
TA的每日心情无聊 14:22签到天数: 2 天[LV.1]初来乍到
G币56 最后登录注册时间
RE: :牛牛看电视1.4.1看央视、卫视、日韩直播!可投屏!
内容不知道怎样
在线时间0 小时G币0 最后登录注册时间帖子阅读权限20UID
小学生, 积分 17, 距离下一级还需 33 积分
该用户从未签到
G币0 最后登录注册时间
真的能用吗?试试看
在线时间63 小时G币2 最后登录注册时间帖子阅读权限70UID143588
学士, 积分 967, 距离下一级还需 133 积分
TA的每日心情无聊 11:11签到天数: 7 天[LV.3]偶尔看看II
G币2 最后登录注册时间
流量监控哦哦我问一下
在线时间0 小时G币3 最后登录注册时间帖子阅读权限30UID
初中生, 积分 89, 距离下一级还需 11 积分
TA的每日心情开心 16:11签到天数: 2 天[LV.1]初来乍到
G币3 最后登录注册时间
谢谢分享!
在线时间0 小时G币24 最后登录注册时间帖子阅读权限30UID
初中生, 积分 80, 距离下一级还需 20 积分
TA的每日心情无聊 07:47签到天数: 1 天[LV.1]初来乍到
G币24 最后登录注册时间
内容可口可乐了了里
在线时间1182 小时G币2555 最后登录注册时间帖子阅读权限80UID1710838
研究生, 积分 1693, 距离下一级还需 7 积分
TA的每日心情开心 07:17签到天数: 3 天[LV.2]偶尔看看I
G币2555 最后登录注册时间
k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k
80 字节以内
不支持自定义 Discuz! 代码
在线时间1846 小时G币71 最后登录注册时间帖子阅读权限90UID524773
硕士, 积分 2427, 距离下一级还需 73 积分
TA的每日心情开心 22:23签到天数: 1 天[LV.1]初来乍到
G币71 最后登录注册时间
在线时间0 小时G币14 最后登录注册时间帖子阅读权限50UID
大学专科, 积分 214, 距离下一级还需 186 积分
TA的每日心情开心 13:22签到天数: 1 天[LV.1]初来乍到
G币14 最后登录注册时间
感谢楼主分享
在线时间0 小时G币21 最后登录注册时间帖子阅读权限40UID
高中生, 积分 143, 距离下一级还需 57 积分
该用户从未签到
G币21 最后登录注册时间
明明椅子舞呜呜呜呜
Powered by拒绝访问 | www.wangchao.net.cn | 百度云加速
请打开cookies.
此网站 (www.wangchao.net.cn) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(44d3a0a707cf4d0e-ua98).
重新安装浏览器,或使用别的浏览器快手直播伴侣投屏教程_怎么投屏_3DM手游
《快手直播伴侣》投屏教程
有时我们使用快手直播伴侣的时候,需要使用投票功能来对屏幕画面进行投放,那么怎么投屏呢?还不知道的小伙伴,快来看看小编带来的这个方法教程吧!
如果是iPhone手机:
运行电脑上录屏大师AirPlay;
在手机底部向上滑动,打开AirPlay选择iTools,确认手机AirPlay开启就可以了。
好了,以上就是小编为大家带来的快手直播伴侣投屏内容,希望能够对你有一定帮助。
手游直播,手游游戏直播工具。
手机直播必备神器!
腾讯官方游戏直播工具!
丰富你的的直播场景!
专业的手机直播辅助软件!
突破次元,跨作互动
三大妈官方安卓手机客户端
文武百官,听候差遣。
奇幻魔法色彩的对战RPG
参与人 0,评论数

我要回帖

更多关于 安卓投屏直播 的文章

 

随机推荐