精华内容
下载资源
问答
  • 2.支持手机屏幕推流。 3.支持麦克风。 4.视频清晰流畅,延迟500ms左右,带宽占用仅1M左右,互联网体验好。 ———————————————— 版权声明:本文为CSDN博主「FMSer.CN」的原创文章,遵循CC 4.0 BY-SA...
  • 该代码可以实现android的屏幕录制和摄像头录制以及通过rtmp上传到服务器
  • Android 悬浮窗、屏幕推流与录屏截屏项目需求声明1. 打开应用后直接显示桌面悬浮窗1). 解决Launcher Activity闪屏问题2). 添加悬浮窗2. 屏幕推流3. 补充关于录屏和截屏1). 录屏2). 截屏 项目需求声明 打开应用后...

    项目需求声明

    1. 打开应用后直接显示桌面悬浮窗
    2. 点击悬浮按钮开始屏幕推流

    1. 打开应用后直接显示桌面悬浮窗

    针对此项目需求,需要考虑的是,我打开app后应启动Launcher Activity,然后将应用栈放到后台。需要注意的是,如果时平常的Activity,那么会闪一下屏幕,这样的效果真的让人不能接受。以下是编码思路:

    1). 解决Launcher Activity闪屏问题

    1. 不给Launcher Activity绑定布局
    2. 给Launcher Activity设置Theme为透明背景:
    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
    
    1. 启动Activity后将栈移至后台运行
    moveTaskToBack(true)
    

    2). 添加悬浮窗

    1. 添加权限

    AndroidManifest中添加权限:

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    

    在Activity中检查悬浮窗权限

    	/**
    	 *	检查权限
    	 */
        public static boolean hasPermissionOnActivityResult(Context context) {
            if (Build.VERSION.SDK_INT == 26) {
                return hasPermissionForO(context);
            } else {
                return Build.VERSION.SDK_INT >= 23 ? Settings.canDrawOverlays(context) : hasPermissionBelowMarshmallow(context);
            }
        }
    
        private static boolean hasPermissionBelowMarshmallow(Context context) {
            try {
                AppOpsManager manager = (AppOpsManager) context.getSystemService("appops");
                Method dispatchMethod = AppOpsManager.class.getMethod("checkOp", Integer.TYPE, Integer.TYPE, String.class);
                return 0 == (Integer) dispatchMethod.invoke(manager, 24, Binder.getCallingUid(), context.getApplicationContext().getPackageName());
            } catch (Exception var3) {
                return false;
            }
        }
        
        @RequiresApi(api = 23)
        private static boolean hasPermissionForO(Context context) {
            try {
                WindowManager mgr = (WindowManager) context.getSystemService("window");
                if (mgr == null) {
                    return false;
                } else {
                    View viewToAdd = new View(context);
                    WindowManager.LayoutParams params = new WindowManager.LayoutParams(0, 0, Build.VERSION.SDK_INT >= 26 ? 2038 : 2003, 24, -2);
                    viewToAdd.setLayoutParams(params);
                    mgr.addView(viewToAdd, params);
                    mgr.removeView(viewToAdd);
                    return true;
                }
            } catch (Exception var4) {
                Log.e("FHApplication", "hasPermissionForO e:" + var4.toString());
                return false;
            }
        }
    

    如果没有权限,则要申请权限(跳转到悬浮窗权限设置页):

        if (VERSION.SDK_INT >= 23) {
            this.requestAlertWindowPermission();
        }
    
        @RequiresApi(
            api = 23
        )
        private void requestAlertWindowPermission() {
            Intent intent = new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION");
            intent.setData(Uri.parse("package:" + this.getPackageName()));
            this.startActivityForResult(intent, requestCode);
        }
    

    返回到Activity时,在onActivityResult方法中添加如下代码:

            if (requestCode == requestCode) {
                if (PermissionUtil.hasPermissionOnActivityResult(this)) {
                	//成功申请到权限
                    mPermissionListener.onSuccess();
                } else {
                	//没有申请到权限
                    mPermissionListener.onFail();
                }
            }
    
    1. 添加悬浮窗
      我使用了开源库,随便找一个就行。已经有的轮子,如非必要,不建议费时费力重新造(但请保持一颗好奇心,可以不造,但总得把实现方法搞清楚得差不多)。

    2. 屏幕推流

    Android 5.0开始Android开放了录屏的方法,可以直接使用。

    	mMediaProjectionManager = 
    		getSystemService(MEDIA_PROJECTION_SERVICE) as MediaProjectionManager
    	val captureIntent = mMediaProjectionManager!!.createScreenCaptureIntent()
    	startActivityForResult(captureIntent, REQUEST_CODE_A)
    

    回调

    	override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    	    super.onActivityResult(requestCode, resultCode, data)
    	    try {
    	        val mediaProjection =
    	            mMediaProjectionManager!!.getMediaProjection(resultCode, data!!)
    	        if (mediaProjection == null) {
    	            Toast.makeText(this, "程序发生错误:MediaProjection@1", Toast.LENGTH_SHORT).show()
    	            return
    	        }
    	        mScreenRecord = ScreenRecord(this, mediaProjection)
    	        mScreenRecord.start()
    	    } catch (e: Exception) {
    	        e.printStackTrace()
    	    }
    	}
    

    ScreenRecord是个线程,在里面继续处理:

        mVirtualDisplay = mMediaProjection.createVirtualDisplay(
            "ScreenRecord",
            width, height, dpi,
            DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC,
            //编码器创建的Surface对象,API>=18时支持:codec.createInputSurface()
            getVideoEncoder()!!.inputSurface,	
            null,
            null
        )
    

    推流过程不是重点,略过。。。

    3. 补充

    mMediaProjection.createVirtualDisplay的调用在Android 8.0及以上必须要在前台线程中进行,否则会报异常。需声明

            <service
                android:name=".view.PushStreamService"
                android:priority="1000"
                android:exported="false"
                android:enabled="true"
                android:foregroundServiceType="mediaProjection">
            </service>
    

    重点时最后一行。

    关于录屏和截屏

    1). 录屏

    Android 提供了MediaRecorder来帮助录屏(不仅仅支持录屏,还可以录制摄像头视频),可以同时录制音视频。网上的教程很多,不再赘述。

    2). 截屏

    Android提供了ImageReader可以使用。

            ImageReader imageReader = ImageReader.newInstance(width, height, ImageFormat.JPEG, 2);
            imageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
                @Override
                public void onImageAvailable (ImageReader reader){
                    Image image = reader.acquireNextImage();
    				//这里做一些其他处理
    				...
    
    				//最后必须close掉拿到的image
                    image.close();
                }
            },new Handler(Looper.getMainLooper()));
    

    以上可以定义一个ImageReader来接收数据,但还需将ImageReader的Surface交给VirtualDisplay:

        mVirtualDisplay = mMediaProjection.createVirtualDisplay(
            "ScreenRecord",
            width, height, dpi,
            DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC,
            imageReader.getSurface(),		//这里是重点
            null,
            null
        )
    

    备注:

    1. 我在为ImageReader设置监听器时,Handler传入了主线程的Handler,这样可以正常接收到数据,但我如果传入了子线程的Handler,就无法接收到任何数据了。原因不详,如有朋友知道原因,请不吝赐教,下方留言👇,蟹蟹~
    2. 我在公司的Android 5.1测试机上测试,ImageReader创建时的第三个参数format传入ImageFormat.JPEG后不会接收到任何数据。然后尝试使用ImageFormat.YUV_420_888后直接报异常,异常的大致意思是i420(ImageFormat.YUV_420_888)的Format值与0x1不匹配,于是第三个参数改为0x1,可以拿到RGBA的byte数组。由此可以使用该数组还原一张完整的图像。至于为什么JPEG不回调、YUV_420_888也不回调、只有0x1才回调但是该值又不在官方给出的format的范围内,如有朋友知道原因,也请不吝赐教👇!!谢谢!!
    展开全文
  • ffmpeg 摄像头和屏幕推流

    千次阅读 2020-01-15 12:09:01
    1 屏幕推流 ffmpeg -f gdigrab -i desktop -vcodec libx264 -s 1280x720 -r 30 -b 1m -f flv rtmp://192.168.1.5:1935/live/desktop2 摄像头推流到服务器 2.1 查看摄像头名称 ffmpeg -list_devices true -f dshow -i...

    1 屏幕推流
    ffmpeg -f gdigrab -i desktop -vcodec libx264 -s 1280x720 -r 30 -b 1m -f flv rtmp://192.168.1.5:1935/live/desktop
    2 摄像头推流到服务器
    2.1 查看摄像头名称
    ffmpeg -list_devices true -f dshow -i dummy
    2.2 执行推流命令
    ffmpeg -f dshow -i video="USB2.0 PC CAMERA" -vcodec libx264 -acodec copy -r 30 -offset_x 10 -offset_y 20  -f flv rtmp://192.168.1.5:1935/live/d1
    其中:Integrated Camera为摄像头名称1 屏幕推流
    ffmpeg -f gdigrab -i desktop -vcodec libx264 -s 1280x720 -r 30 -b 1m -f flv rtmp://192.168.1.5:1935/live/desktop
    2 摄像头推流到服务器
    2.1 查看摄像头名称
    ffmpeg -list_devices true -f dshow -i dummy
    2.2 执行推流命令
    ffmpeg -f dshow -i video="USB2.0 PC CAMERA" -vcodec libx264 -acodec copy -r 30 -offset_x 10 -offset_y 20  -f flv rtmp://192.168.1.5:1935/live/d1
    其中:Integrated Camera为摄像头名称

    示例:

    采集桌面窗口的视频,保存到文件
    ffmpeg -f gdigrab -i title="TfrmAtv2020" -f dshow   -pix_fmt yuv420p -vcodec libx264 -an -s 1280x720 -r 25 -q 10   -tune zerolatency -preset ultrafast -f mpegts - | ffmpeg -y -f mpegts -i - -c copy -bsf:a aac_adtstoasc -f flv e:/12.mp4

    采集桌面窗口的视频,推送到流媒体服务器
    ffmpeg -f gdigrab -i title="TfrmAtv2020" -f dshow   -pix_fmt yuv420p -vcodec libx264 -an -s 1280x720 -r 25 -q 10   -tune zerolatency -preset ultrafast -f mpegts - | ffmpeg -y -f mpegts -i - -c copy -bsf:a aac_adtstoasc -f flv rtmp://192.168.1.5:1935/live/pp

    展开全文
  • 本应用使用rtmp推流+录屏+instrutation模拟点击实现远程控制操作,由于有跨进程模拟鼠标操作,所以需要root权限,该服务需要适配后台服务器一起使用,安卓中的ip和端口等注意需要根据实际情况修改,最后祝大家爬坑...
  • 屏幕共享 推流

    2019-09-23 15:23:03
    1.局域网内要有流媒体服务器,手机安装这样的推流app,手机屏幕推流到服务器,其他电脑 手机等 可以用播放器观看 2.window也有这样的客户端,也可以推流电脑的屏幕,观看的话就是用播放器观看就行了。 3.电脑端用...

    1.局域网内要有流媒体服务器,手机安装这样的推流app,手机屏幕推流到服务器,其他电脑 手机等 可以用播放器观看

    2.window也有这样的客户端,也可以推流电脑的屏幕,观看的话 就是用播放器观看就行了。

    3.电脑端用EasyScreenLive,下载地址为:https://github.com/tsingsee/EasyScreenLive
    运行C#的sln,运行成功之后,和手机demo一起测试
    换成单波就可以了正常运行demo了。

    4.

    展开全文
  • webrtc android capture 上一篇 发现视频采集有问题 自己的客户端是2018年、2017年的 主干版本已经废弃。 大神做了修改,但是在我这里会崩溃 本想升级下 ,发现 VideoRender 没了,尝试使用新api,但是信令有问题,...
  • 支持将rtsp,rtmp保存为MP4文件,同时可以进行将摄像机RTSP流推媒体服务器
  • Android手机屏幕RTMP推流工具

    千次阅读 2021-06-21 14:47:04
    Android手机屏幕RTMP推流工具是一款可以将安卓手机屏幕上的任何内容推送到任意一款rtmp服务器上的工具,不仅可以分享手机屏幕内容,还可以分享手机上正在播放的视频、正在捕获的相机内容

    Android手机屏幕RTMP推流工具是基于ffmpeg+opencv开发的C++(eclipse jni)程序,是一款可以将安卓手机屏幕上的任何内容推送到任意一款rtmp服务器上的工具,不仅可以分享手机屏幕内容,还可以分享手机上正在播放的视频、正在捕获的相机内容、其它APP正在播放的视频等所有屏幕上可视的内容,同时支持麦克风捕获,是一款类似于户外直播的软件,但直播的不仅仅是摄像头内容。

    下载地址:https://download.csdn.net/download/XiBuQiuChong/19762295

    开发日志:

    2021.10.5 解决不定时崩溃问题,目前可以长期稳定运行5小时以上(更长时间没测试)。

    2021.10.1 解决后台声音捕获超过1分钟停止捕获的问题。

    手机画面

    播放画面

    软件名称:Android手机屏幕RTMP推流工具

    开发日志:

    2021.8.15 修正麦克风音频断续问题。

    功能简介:

    1.支持手机摄像头推流。

    2.支持手机屏幕推流。

    3.支持麦克风。

    4.视频清晰流畅,延迟500ms左右,带宽占用仅1M左右,互联网体验好。

    展开全文
  • 视频流媒体中视频数据的传输占据了绝大部分的带宽,如何提升编码效率、减小带宽...EasyRTMP推流功能特点 - 调用简单 无论是个人开发者还是企业级应用,只需要简单的几个接口调用就可以完成一套完整的互联网直播应...
  • Android摄像头RTMP推流

    热门讨论 2016-03-01 12:05:40
    使用FFMPEG的RTMP推流修改而来,可以读取摄像头和音频推流至流媒体服务器,适合做视频直播的新手参考.
  • 屏幕采集推流\录屏

    2020-09-25 09:31:10
    3. 可以选择是否采集系统声音, 这样如果是在直播屏幕时可以一边讲解一边直播.录像也是会同步把声音录下. 这里是MIC与系统声音的混音. 4. 可以录像, 录像时输出都是1920*1080的画面, 即便是采集的是小窗口最后我们...
  • Real Time Messaging Protocol(RTMP)即实时消息传输协议,是 Adobe 公司开发的一个基于 TCP 的应用层协议,目前国内的视频云服务都是以 RTMP 为主要推流协议。 关于RTMP推流组件 EasyRTMP是一套调用简单、功能...
  • ffmpeg录制屏幕推流 HLS

    千次阅读 2020-05-14 22:34:40
    楔子 学习笔记 ffmpeg+nginx +EasyPlayer.js ...--录制屏幕 送 flv ffmpeg -f gdigrab -i desktop -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1985/myapp
  • 使用和了解EasyRTMP组件的朋友们应该清楚,手机屏幕推流时支持直播推送、屏幕推送、录像等功能,不拘泥于手机品牌与网络环境,实现课堂直播、互联网直播、手机直播等,符合现行条件下网络突飞猛进的需求。...
  • } ////////////////////////////////////////////////////////////////////////////////////////////////////// //打开输出 rtmp 地址 rtmp://你的媒体服务器IP地址:端口/live/随意取啥 const char* rtmpurl ...
  • 在读这篇文章前您先要对编码 推流 有一定的基础。 1.录制屏幕 在Android5.0 后可以采用原生的APIMediaProjection 来获取一个virtual的display 从而实现屏幕录制。 我们第一步就是要先把屏幕数据拿出来 @...
  • 安卓rtmp推流工具

    2019-05-10 11:00:41
    安卓app,rtmp推流工具,
  • 抓取屏幕和声卡的音视频数据,编码后进行RTSP转发, RTSP推流, RTMP推流。 目前情况 完成屏幕采集(DXGI)和H.264编码。 完成音频采集(WASAPI)和AAC编码。 完成RTSP本地转发音视频数据。 完成RTSP推流器。 完成RTMP推流...
  • ffmpeg rtmp推流代码示例

    千次阅读 2020-01-31 21:22:11
    rtmp推流,得有rtmp服务器,可以参考这篇博客搭建rtmp服务器 ===》》》ubuntu搭建rtmp服务器,如果自己有rtmp服务器,可以不用看。 rtmp推流需要用flv格式, 本篇博客demo是本地flv文件rtmp推流. 主要流程如下: ...
  • 基于VLC实现RTSP推流桌面(共享桌面)一、添加VLC头文件和库文件二、封装RTSPServer推流类三、测试代码 不清楚推流大概原理的小伙伴,参考《设置VLC播放器进行RTSP推流桌面(共享桌面)》 一、添加VLC头文件和库文件...
  • ffmpeg C++推流

    千次阅读 2018-11-09 15:59:58
    ffmpeg 推流器代码如下: #include &lt;iostream&gt; using namespace std; //引入头文件 extern "C" { #include "libavformat/avformat.h" //引入时间 #include "libavutil/...
  • 设置VLC播放器进行RTSP推流桌面(共享桌面)一、推流与拉流概念二、设置推流端三、设置拉流端(播放端) 一、推流与拉流概念 首先,做几个名词解释。 推流,指的是把采集阶段封包好的内容传输到服务器的过程。 拉流...
  • 后端发请求推流: rtmp本地流 : >ffmpeg -re -i E:\catmouse.mp4 -vcodec copy -acodec copy -f flv -y rtmp://localhost/live/0 rtsp : >ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -...
  • ffmpeg_windows屏幕录制并编码成H264。 该工程为qt_creator工程
  • 这章阐述如何把采集到的电脑屏幕和电脑声音,通过一些通用协议,比如RTSP,RTMP把电脑桌面屏幕推送到更广泛的直播服务器上,达到电脑屏幕直播的效果。或者把电脑屏幕保存成本地的MP4或MKV视频...
  • 使用ffmpeg for linux 录屏推流

    千次阅读 2018-11-29 22:36:45
    录制桌面、麦克风、摄像头(推流) ffmpeg -thread_queue_size 128 -f x11grab -video_size 1280x800 -framerate 30 -i :0.0 -f video4linux2 -video_size 400x300 -framerate 30 -i /dev/video0 -f alsa -ac 2 -i ...
  • 再者,推流你得有个流媒体服务,个人测试用小水管:rtmp://eguid.cc:1935/rtmp/test(小水管,请尽量错开时间使用,另切记推流视频码率不要太高,避免占用太多带宽) 一、摄像头信息采集和录制推流 摄像头名称要...
  • 同于业务需要在教学系统中实现直播和录制,我们都知道目前主要直播是RTMP为基础的直播系统,为了和业务系统方便集成需要以Web系统为基础的rtmp推流工具,H5原生不支持定义自定义socket消息,主流技术是用插件实现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,625
精华内容 11,050
关键字:

屏幕推流