精华内容
下载资源
问答
  • ScreenCapture Android屏幕共享
  • Android屏幕共享-传输图片

    千次阅读 2020-07-28 22:05:22
    Android屏幕共享-传输图片 该篇主要讲解安卓与安卓之间如何截图传输,属于安卓屏幕共享的入门篇。适用场景:安卓屏幕共享工具类应用。 效果图 效果图 demo界面 前言 目前安卓屏幕共享的方式有很多种软件已经实现...

    Android屏幕共享-传输图片

    该篇主要讲解安卓与安卓之间如何截图传输,属于安卓屏幕共享的入门篇。适用场景:安卓屏幕共享工具类应用。

    效果图

    效果图

    效果图
    demo界面

    Demo

    前言

    目前安卓屏幕共享的方式有很多种软件已经实现,究其根源,无非就是采集-传输-播放的过程,而安卓端无论是截图传输还是硬解码,也一定离不开核心类MediaProjection,它就是Google开放了视频录制的接口(屏幕采集的接口)。

    比较优秀的软件举例:

    • TeamViewer
    • 向日葵
    • Vysor

    其中Vysor就是通过adb实现无root静默截图,然后传输,实现电脑控制手机。在整个屏幕共享的过程中,重点在于如何采集,采集到画质清晰内存又小的技术成为核心。

    常用的安卓端采集技术有:

    • MediaProjection 实现截图
    • MediaProjection 硬解码
    • ffmpeg 软解码
    • adb 实现无root截图

    功能点

    1. android5.0及以上免root截图
    2. 安卓屏幕变化的时候采集
    3. 多端共享拓展简单
    4. socket传输字节数组
    5. 尽可能都使用原生代码实现

    功能讲解

    截图

    随着安卓系统的不断升级,权限也越来越收紧,无root并且不连接数据线做不到静默截图,这里指截取不属于该app的区域。

    • 在允许连接数据线的情况下,可以通过adb shell push 事先编译好的 dex 文件到手机中,实现静默截图。
    • 在没有链接数据线无root的情况下,只能显式的让用户有感知的进行截取。本篇截图使用的是 MediaProjection, 如下图:

    在这里插入图片描述

    MediaProjection 是Android 5.0 开放的屏幕截图与录制视频的接口,是一个系统级的服务,在使用前需要动态申请权限,并在onActivityResult进行处理。
    eg:

         /**
         * 申请截屏权限
         */
        private void tryStartScreenShot() {
            MediaProjectionManager mProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
            if (mProjectionManager != null) {
                startActivityForResult(mProjectionManager.createScreenCaptureIntent(), REQUEST_MEDIA_PROJECTION);
            }
        }
        
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == REQUEST_MEDIA_PROJECTION && data != null) {
                if (resultCode == RESULT_OK) {
                    // 截屏的回调
                    ScreenShotHelper screenShotHelper = new ScreenShotHelper(this, resultCode, data, this);
                    screenShotHelper.startScreenShot();
                } else if (resultCode == RESULT_CANCELED) {
                    LogWrapper.d(TAG, "用户取消");
                }
            }
        }
    
    

    在屏幕共享时,一直截图就会很费性能,如果在屏幕改变时进行截图就好了。
    刚好,在ImageReader中有setOnImageAvailableListener可以让我们方便的拿到屏幕变化的数据。eg:

         /**
         * 屏幕发生变化时截取
         */
        private class ImageAvailableListener implements ImageReader.OnImageAvailableListener {
            @Override
            public void onImageAvailable(ImageReader reader) {
                try (Image image = reader.acquireLatestImage()) {
                    if (image != null) {
                      // todo 
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
    

    图片处理

    图片格式:

    • png:无损压缩图片格式,支持Alpha通道
    • jpeg:有损压缩图片格式,不支持背景透明
    • webp:“WebP 是 Android 4.2.1(API 级别 17)支持的较新图片格式。这种格式可为网络上的图片提供出色的无损压缩和有损压缩效果。使用 WebP,开发者可以创建更小、更丰富的图片。WebP 无损图片文件比 PNG 平均缩小了 26%。这些图片文件还支持透明度(也称为 Alpha 通道),只需增加 22% 的字节。
      WebP 有损图片比采用等效 SSIM 质量指标的同等 JPG 图片缩小 25-34%。对于可以接受有损 RGB 压缩的情况,有损 WebP 也支持透明度,生成的文件大小通常比 PNG 小 3 倍。” – 出自谷歌官方文档

    笔者曾尝试过webp格式的编码,大小确实降低了50%左右,但是编码耗时却长了100%,相当于用CPU换网速。这样看来webp并不适用该场景。

    图片压缩:

    • 压缩大小
    • 压缩图片质量

    该Demo的代码中是将bitmap压缩到固定的大小

    Server:

    /**
         * 压缩图片 (压缩后不代表实际大小,有差异)
         *
         * @param bitmap    被压缩的图片
         * @param sizeLimit 大小限制  单位 k
         * @return 压缩后的图片
         */
        public static Bitmap compressBitmap(Bitmap bitmap, long sizeLimit) {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            int quality = 90;
            bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos);
            // 循环判断压缩后图片是否超过限制大小
            while (baos.toByteArray().length / 1024 > sizeLimit) {
                baos.reset();
                bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos);
                quality -= 10;
            }
            return BitmapFactory.decodeStream(new ByteArrayInputStream(baos.toByteArray()), null, null);
        }
    
    

    socket传输

    原生socket在发送大量数据时,会进行分包,接收的时候也就必须要合包;
    有一些第三方socket框架会帮助我们处理合包的操作,websocket则是在它的协议标准中处理了这个问题。
    所以该demo中选用了websocket进行通讯。拿到的截图的数据放进去就可以了。

    
    import com.talon.screen.quick.util.LogWrapper;
    import org.java_websocket.WebSocket;
    import org.java_websocket.handshake.ClientHandshake;
    import org.java_websocket.server.WebSocketServer;
    
    import java.net.InetSocketAddress;
    
    /**
     * @author by Talon, Date on 2020-04-13.
     * note: websocket 服务端
     */
    public class MWebSocketServer extends WebSocketServer {
    
        private final String TAG = "MWebSocketServer";
    
        private WebSocket mWebSocket;
        private boolean mIsStarted = false;
        private CallBack mCallBack;
    
        public MWebSocketServer(int port, CallBack callBack) {
            super(new InetSocketAddress(port));
            this.mCallBack = callBack;
            setReuseAddr(true);
            setConnectionLostTimeout(5 * 1000);
        }
    
        @Override
        public void onOpen(WebSocket webSocket, ClientHandshake handshake) {
            LogWrapper.d(TAG, "有用户链接");
            mWebSocket = webSocket;
        }
    
        @Override
        public void onClose(WebSocket conn, int code, String reason, boolean remote) {
            LogWrapper.d(TAG, "有用户离开");
        }
    
        @Override
        public void onMessage(WebSocket conn, String message) {
            LogWrapper.e(TAG, "接收到消息:" + message);
        }
    
        @Override
        public void onError(WebSocket conn, Exception ex) {
            LogWrapper.e(TAG, "发生error:" + ex.toString());
        }
    
        @Override
        public void onStart() {
            updateServerStatus(true);
        }
    
        /**
         * 停止服务器
         */
        public void socketStop() {
            try {
                super.stop(100);
                updateServerStatus(false);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 发送二进制
         *
         * @param bytes
         */
        public void sendBytes(byte[] bytes) {
            if (mWebSocket != null)
                mWebSocket.send(bytes);
        }
    
        private void updateServerStatus(boolean isStarted) {
            mIsStarted = isStarted;
            LogWrapper.e(TAG, "mIsStarted:" + mIsStarted);
            // 回调
            if (mCallBack != null)
                mCallBack.onServerStatus(isStarted);
        }
    
        public boolean isStarted() {
            LogWrapper.e(TAG, "mIsStarted:" + mIsStarted);
            return mIsStarted;
        }
    
        public interface CallBack {
            void onServerStatus(boolean isStarted);
        }
    
    }
    
    

    Client:

    import com.talon.screen.quick.util.BitmapUtils;
    import com.talon.screen.quick.util.LogWrapper;
    
    import org.java_websocket.client.WebSocketClient;
    import org.java_websocket.handshake.ServerHandshake;
    
    import java.net.SocketException;
    import java.net.URI;
    import java.nio.ByteBuffer;
    
    /**
     * @author by Talon, Date on 2020-04-13.
     * note: websocket 客户端
     */
    public class MWebSocketClient extends WebSocketClient {
    
        private final String TAG = "MWebSocketClient";
    
        private boolean mIsConnected = false;
        private CallBack mCallBack;
    
        public MWebSocketClient(URI serverUri, CallBack callBack) {
            super(serverUri);
            this.mCallBack = callBack;
        }
    
        @Override
        public void onOpen(ServerHandshake handshakeData) {
            LogWrapper.e(TAG, "onOpen");
            updateClientStatus(true);
    
            try {
                getSocket().setReceiveBufferSize(5 * 1024 * 1024);
            } catch (SocketException e) {
                e.printStackTrace();
            }
    
    
        }
    
        @Override
        public void onMessage(String message) {
    
        }
    
        @Override
        public void onMessage(ByteBuffer bytes) {
            byte[] buf = new byte[bytes.remaining()];
            bytes.get(buf);
            if (mCallBack != null)
                mCallBack.onBitmapReceived(BitmapUtils.decodeImg(buf));
        }
    
        @Override
        public void onClose(int code, String reason, boolean remote) {
            updateClientStatus(false);
        }
    
        @Override
        public void onError(Exception ex) {
            updateClientStatus(false);
        }
    
        private void updateClientStatus(boolean isConnected) {
    
            mIsConnected = isConnected;
            LogWrapper.d(TAG, "mIsConnected:" + mIsConnected);
            // 回调
            if (mCallBack != null)
                mCallBack.onClientStatus(isConnected);
        }
    
        public boolean isConnected() {
            LogWrapper.d(TAG, "mIsConnected:" + mIsConnected);
            return mIsConnected;
        }
    
        public interface CallBack {
            void onClientStatus(boolean isConnected);
    
            void onBitmapReceived(Bitmap bitmap);
        }
    
    
    }
    

    Demo下载

    demo下载(github)
    demo下载(CSDN)

    展开全文
  • androidScreenShareAndControl, android屏幕共享及远程控制
  • 因近期项目需要,实现了一套多种网络拓扑、多种应用场景的多平台屏幕共享系统,包括组播屏幕共享、服务器转发屏幕共享、P2P屏幕共享,暂支持Windows屏幕共享给Windows,Windows屏幕共享Android等,后续加入android...

               因近期项目需要,实现了一套多种网络拓扑、多种应用场景的多平台屏幕共享系统,包括组播屏幕共享、服务器转发屏幕共享、P2P屏幕共享,暂支持Windows屏幕共享给Windows,Windows屏幕共享给Android等,后续加入android、IOS的相互共享。下文进行简单的总结,具体细节请参考 www.mediapro.cc

     

    • 应用场景

       1、一对一屏幕共享

                                          

     

    同一局域网内,发送端将自身屏幕和音频共享给指定的接收端,常用于办公会议、游戏电影投屏等场合。

    系统通过集成QOS-FEC-NACK传输库点对点版SDK实现对弱网的支持(SDK支持Windows\Android\嵌入式Linux\IOS),系统总体延时可控制在120ms以内。注意SDK支持全双工通讯,本应用场景中仅使用到单向的传输。

          2、一对多组播屏幕共享

    同一局域网内,发送端将自身屏幕和音频共享给一组接收端,常用于教学等场合。

    优点:通过组播技术的使用,无需架设转发服务器即可实现一对多分发。

    缺点:由于WIFI(802.11)网络对于组播和广播在数据链路层无法提供类似单播的保障,WIFI下的组播容易出现较高的丢包率,因此本方案更适合有线网络。

                                   

           系统通过集成QOS-FEC传输库点对点版SDK实现对弱网的支持(SDK支持Windows\Android\嵌入式Linux\IOS),系统总体延时可控制在120ms以内。因为数据流是单向因此无法使用NACK丢包重传机制。

           3、一对多公网屏幕共享

            当需要实现异地跨公网一对多屏幕共享时,就需要在公网上架设媒体转发服务器。SRTP-Server是在RTP-FEC-QOS传输层基础上建立了一套轻量级RTP直播转发服务器集群,可用于一对多、多对多等场合的音视频实时互动,客户端支持全平台包括PC客户端、浏览器、Android、IOS、嵌入式Linux,关于SRTP-Server更详细介绍请移步:www.mediapro.cc

            SRTP-Server有集群版本和非集群版本,集群版本用于同一房间大规模的公开课等场合,非集群版本则用于同一个房间数十人规模的屏幕共享(房间数目、总的接收端数目受限于服务器带宽、内存、CPU)。

                            

           客户端(包括发送端和接收端)通过集成SRTP-Server配套的SDK可实现同一房间多路流直播,比如发送屏幕共享的同时发送摄像头数据。SRTP-Server基于房间模式,不同的房间相互隔离。

                                          

          通过公网服务器转发的方式可实现异地多人屏幕共享,但也存在无法避免的缺点:

          A、系统延时受网络线路影响较大,网络条件较好的阿里云服务器上,延时可以控制在300ms内。

          B、服务器带宽成本随用户数、视频码率而增长。

          当然本系统也可部署到内网,实现一对多的WIFI屏幕共享,解决组播对WIFI支持不佳的问题。

           4、一对一公网P2P屏幕共享

           公网上当仅需要一对一的屏幕共享时,我们可以使用P2P技术来节省服务器带宽成本。SRTP-Server-P2P版转发服务器支持客户端一对一P2P双向传输。SDK在P2P不成功或者丢包率较高的情况下会自动切换回服务器转发模式,实现了STUN和TURN的功能。

                                       

          P2P方式大幅节省了服务器带宽成本,但也对服务质量产生了一定影响,体现在以下几点:

          A、不同运营商的客户端之间P2P即便可以打通,或许可以承载低码率的视频通话业务,但无法承载高码率的屏幕共享业务。

          B、因网络原因在P2P和转发之间切换对用户的使用体验产生影响。

     

    • 一些注意事项

    • 组播需要关闭发送端的本地回环模式,降低发送端开销。
    • 对于内网两台机器走P2P时应使用内网地址通讯而不用对方的出口IP,虽然二者均可以互通,但内网IP效率更高。
    • 由于屏幕共享码率较高,尽量使用非阻塞的socket,设置socket的系统缓存到512KB以上,避免因socket缓存原因引入系统丢包。
    • 使用微软WASAPI采集扬声器音频时,会出现无音频播放时,采集回调无调用的情况,这对于直播没有影响,但会影响录制的TS素材。比如录制文件一开始没有音频数据仅有视频数据,则某些播放器会直接跳到存在音频的部分播放。解决的方法是:发送端自行输出静音数据。
    • 因为屏幕共享对于分辨率要求较高,高分辨率编码将对发送端机器形成压力,建议优先使用硬编码,若不支持再使用X264。PC上目前主流硬编码有Intel CPU自带的核心显卡QsvEncode和英伟达显卡带的NviEncode。高版本的ffmpeg对二者提供了支持,不过采集到的编码码流需要进行统一过滤处理,比如过滤直播中无用的NAL_AUD和NAL_FILLER_DATA,前者因为我们UDP自身加入了边界,后者纯属冗余数据,经过这样处理可以大幅节省带宽。
    • 由于屏幕共享码率较高,FEC处理需要开启动态Group模式,在不增加冗余度的情况下增强连续丢包的抵抗力。
    • 屏幕画面变化相比摄像头画面变化来得剧烈,使用硬编码时码率波动更大,发送端可开启Smooth平滑发送,接收端视业务情况开启接收缓存。

      组播接收端启动界面:

            

      发送端启动界面:

                                        

      屏幕共享客户端、服务器相关执行程序、硬编码封装源码等可从github获取:https://github.com/waterfoxfox

     

    展开全文
  • 共享你的屏幕和音频到另一台手机 具体分辨率,帧率,声道,和采样率因机型而定 手动狗头.
  • Android屏幕共享与直播-red5流媒体服务器搭建 效果gif 屏幕共享与直播模型 推流推流推流播放播放播放PC流媒体服务器AndroidIOSwebAndroidIOS 一、下载 官方地址:https://github.com/Red5/red5-server/releases 二、...

    Android屏幕共享与直播-red5流媒体服务器搭建

    效果gif

    效果

    屏幕共享与直播模型

    推流
    推流
    推流
    播放
    播放
    播放
    PC
    流媒体服务器
    Android
    IOS
    web
    Android
    IOS

    一、下载

    官方地址:https://github.com/Red5/red5-server/releases

    二、安装并配置环境变量

    1. 安装之前需要配置jdk的环境变量。(自行解决)

    2. 下载后移动red5文件夹到某个目录

    3. 配置red5的环境变量。
      添加变量名:red5_home
      变量值:E:\red5-server

      添加变量名:ClassPath
      变量值:.(不配置此变量,或者此变更的值不是“.”,red5启动的过程会抛异常)

    三、启动与验证

    1. 到red5目录下,双击“red5.bat”文件,启动red5
    2. 在浏览器中输入http://localhost:5080/,可成功打开,表示red5部署成功。如图

    验证

    四、更改端口

    1. 找到red5-server\conf\red5.properties文件,进行编辑
    2. http.host、http.port 对应 可访问的地址和端口(无需求可不更改)
    3. rtmp.host、rtmp.port 对应推送流的地址和端口
      如图:

    更改端口

    此时,一个简单的流媒体服务器已经搭建完成。我们再使用Android的app进行推流或者播放就可以了。

    五、联系

    • 遇到问题或想持续学习,请关注公众号“Android唐浮”
    • 如果想省去这一步操作,想直接使用搭建好的流媒体也通过公众号“Android唐浮”联系我,我搭建好的已经放在了云端。
    展开全文
  • Android屏幕共享及远程控制【免root】

    千次阅读 2020-10-31 23:10:47
    Android屏幕共享及远程控制【免root】 使用方式 对于mac 笔记本用户: Android手机开启开发者选项 用数据线连接Android手机和mac 运行lib目录下的Client,用于显示和控制 运行lib目录下的Install,然后点击连接按钮...

    Android屏幕共享及远程控制【免root】

    使用方式

    对于mac 笔记本用户:

    • Android手机开启开发者选项
    • 用数据线连接Android手机和mac
    • 运行lib目录下的Client,用于显示和控制
    • 运行lib目录下的Install,然后点击连接按钮,若不显示请安如下方式操作

    对于所有用户:

    • Android手机开启开发者选项
    • 用数据线连接Android手机和PC
    • 使用adb命令把项目根目录下的Main.dex放到手机中 adb push Main.dex /sdcard/Main.dex
    • 执行adb shell命令 adb shell
    • 执行命令 export CLASSPATH=/sdcard/Main.dex
    • 执行命令 exec app_process /sdcard com.wanjian.puppet.Main
    • 新建命令窗口,然后执行 adb forward tcp:8888 localabstract:puppet-ver1
    • 运行lib目录下的Client,用于显示和控制,点击连接按钮即可

    注意:高版本的android手机需要去开发者选项中开启 允许模拟点击
    在这里插入图片描述

    屏幕共享原理

    原理和Vysor相同,Android提供了两个截屏方法Surface. screenshot和SurfaceControl. screenshot, 这两个API是隐藏的,客户端没有权限调用,即使通过反射也得不到bitmap,我们可以使用adb命令 启动一个进程,让该进程调用该API就可以得到bitmap了,然后通过socket把数据发送到PC即可。

    关键代码如下:

    public class Main{
        public static void main(String[]args){
            Point size = new Point();
            size.x = 1080;//最终截屏图片的大小,可以和屏幕不一样大
            size.y = 1920;
           String surfaceClassName;
               if (Build.VERSION.SDK_INT <= 17) {
                surfaceClassName = "android.view.Surface";
               } else {
                surfaceClassName = "android.view.SurfaceControl";
               }
               Bitmap b = (Bitmap) Class.forName(surfaceClassName).getDeclaredMethod("screenshot", new Class[]{Integer.TYPE, Integer.TYPE}).invoke(null, new Object[]{Integer.valueOf(size.x), Integer.valueOf(size.y)});
        }
    }
    

    然后按照如下操作:

    • 把这个类编译成class文件
    • 使用dx --dex --output=Main.dex Main.class打包成dex文件
    • 把dex文件发送到手机adb push Main.dex /sdcard/Main.dex
    • 执行adb shell进入shell
    • 设置类路径 export CLASSPATH=/sdcard/Main.dex
    • 运行代码 exec app_process /sdcard Main

    这样就可以调用到Main.main方法

    远程控制原理

    • PC端获取点击位置相对于当前显示窗口的比例
    • 把该比例发送给手机端
    • 手机端根据手机屏幕大小把比例转换成绝对位置并调用如下代码既可以实现远程控制,x和y是点击的绝对位置,action是动作,如按下,滑动,抬起等
    InputManager im = (InputManager) InputManager.class.getDeclaredMethod("getInstance", new Class[0]).invoke(null, new Object[0]);
    MotionEvent.class.getDeclaredMethod("obtain", new Class[0]).setAccessible(true);Method injectInputEventMethod = InputManager.class.getMethod("injectInputEvent", new Class[]{InputEvent.class, Integer.TYPE});MotionEvent event = MotionEvent.obtain(downTime, eventTime, action, x, y, pressure, 1.0f, 0, 1.0f, 1.0f, 0, 0);event.setSource(InputDeviceCompat.SOURCE_TOUCHSCREEN);injectInputEventMethod.invoke(im, new Object[]{event, Integer.valueOf(0)});
    
    展开全文
  • http://blog.csdn.net/guang09080908/article/details/41413449#reply,这个是对应的Android的版本,两者一个是server端,一个是Android端,配合使用即可。
  • 实现android屏幕共享到pc总结

    千次阅读 2017-12-07 17:52:52
    使用android5.0的API MediaProjection 先获取到H264 的视频流,具体使用方式可参考: (随便搜了一个)http://blog.csdn.net/leif_/article/details/50971659。 然后将获取到的H264数据进行rtp打包,具体打包网上...
  • 做为一个Android 开发人员,免不了会遇到这样的场景,为了便于程序的测试与演示,我们常常需要把手机屏幕投射到电脑上,然后通过投影仪播放出来,有朋友可能会问了,模似器不就解决问题了吗?实际上,在过去,一方面...
  • windows 下 Android手机屏幕共享软件,只支持windows平台,这是一个让手机屏幕映射到电脑的软件
  • 【太平洋汽车网】使用宝马屏幕共享要先打开车载电脑多媒体功能,再选择屏幕共享手机投屏,勾掉宝马互联选项,然后再打开手机wifi,选择BMW输入密码即可使用屏幕共享。车手机互联映射即车机互联,就是将手机投屏到...
  • 免root兼容所有android屏幕实时共享及远程控制
  • android手机屏幕共享软件

    热门讨论 2012-12-20 10:40:25
    本软件可以实时显示android手机屏幕的动态 方便android开发人员开发 欢迎前来下载
  • android手机屏幕共享神器踩坑指南

    千次阅读 2018-11-30 19:15:16
    scrcpy,由 Genymobile 推出的可跨平台的、可自定义码率的、开源的屏幕共享工具。它提供了在 USB (或 TCP/IP )上连接的 Android 设备的显示和控制,适用于 GNU/Linux、Windows 和 MacOS 。 Genymotion 模拟器就是 ...
  • Android手机屏幕共享的电脑的方法一般有如下两种: 方法一: 使用XX手机助手 网上有很多手机助手,比如百度手机助手.在电脑上下载安装后,里边 有个小工具叫屏幕共享,连上手机,打开就可以用了. ...
  • Android实现手机和电脑屏幕共享

    万次阅读 2016-12-19 15:19:14
    Android开发中,最近遇到了一个这样的问题,项目开发中,你可能会被要求向客户演示你开发的项目成果,当然,你可以采用一般的方式PPT,但是如果你是给客户演示,为了效果更好的话当然是实时操作,这就需要软件来进行...
  • android设备之间屏幕共享

    万次阅读 热门讨论 2014-10-05 11:21:52
    这样,就达到了屏幕共享的目的。 思考了一下,主要思路: 1、将截图所获取的位图用ffmpeg编码成视频流。 2、将视频流用live555进行流媒体分发。手机即可播放这个视频流,达到屏幕传输到手机上。 3、手机上将...
  • 两个android设备连接同一wifi,分别安装两个apk,实现将一个设备的屏幕投射给另一个android设备,视频码率清晰度可配置。 资源链接:https://download.csdn.net/download/weixin_41532138/11419469 ...
  • 开发Android studio 3.6.3 要求 目标 SDK 版本:29 最小 SDK 版本:24 博客 使用图书馆 执照 Copyright 2016, 2020 Taehwan Licensed under the Apache License, Version 2.0 (the "License"); you may not use ...
  • 两个android设备连接同一wifi,分别安装两个apk,实现将一个设备的屏幕投射给另一个android设备,视频码率清晰度可配置。
  • Android手机之间实现屏幕共享

    万次阅读 热门讨论 2018-04-12 15:32:32
    已经实现,优化空间还很大。 效果Gif ...方法二:用录屏API录制手机屏幕,上传至服务器。 Demo用方法一实现的,可以看GIF,我觉得可以优化的空间: 1,截图:截图时找到合适的频率,能不能优化一下...
  • webrtc M66 android 端实现屏幕共享功能

    千次阅读 热门讨论 2019-04-01 13:07:52
    webrtc M66 android 实现屏幕共享功能 一,我们先看一下摄像头采集的逻辑; 摄像头的初始化 // Gets the device name of the front camera Camera1Enumerator enumerator = new Camera1Enumerator(false); String ...
  • Android 手机TV端屏幕共享助手

    千次阅读 2017-06-01 13:07:09
    主要功能是实现同局域网下,手机端和TV端连接并分享手机屏幕画面(手机端只支持Android 5.0级以上版本)。  好了,先上图。app端和tv端两个demo。  app端主界面截图。    至于TV端并没有实现
  • android开发过程中,我们有时候需要将手机屏幕共享到PC桌面做实时演示。在windows下我们可以使用360手机助手、豌豆荚等应用。那么在macOS下我们如何做到共享android手机的屏幕呢? 1.应用chrome的一个插件vyox...
  • android开发之屏幕共享的解决方案

    千次阅读 2017-01-02 11:07:59
    还有android上实现屏幕共享功能的原理和解决方案是否和PC机上一样呢? 求大神讲解一下具体的解决方案! 就是麻烦说一下要实现这个功能模块需要用到什么技术, 比如 截屏,压缩算法,传输协议什么的
  • android开发之局域网内屏幕共享+提取文字,因为是新手,所以代码很烂,有错误或者不懂可以和我说,我会去改和跟你说的
  • 回去看看老家是不是还有旧平板电脑,可以跨设备,共享屏幕哦 一些远程控制软件,诸如:TeamViewer、AnyDesk等。 但是这次我要介绍的是 一款远程显示软件,甚至可以理解成一款简易的KVM系统。 虽然市面上许多远程...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,039
精华内容 13,615
关键字:

android屏幕共享