求帮忙做pr怎样把第一张变成封面直播封面

五分钟看懂开发一个直播封面上传功能的过程
菜鸟窝技术文章编辑招募中,可免费学习优秀实战课程,有兴趣快加菜鸟君微信:keely-jzx。
直播封面上传功能运行效果
直播界面讲解
直播标题 当前直播的标题,内容简介直播封面 封面图片会在如上图显示以及直播列表上显示是否录制 直播结束之后需要观看直播,就需要录制,直播结束之后录制的视频文件就叫点播,可以对视频进行永久的存储摄像头直播 根据主播需求打开前置摄像头还是后置摄像头录屏直播 只要用于屏幕录播,例如:游戏 在5.0以上录制清晰度 码流和分辨率(流畅,超清,高清)决定
界面布局不贴了,读者自己看着界面做,这里需要提示一下,界面上用到的自定义控件在下期文章中有讲。
直播封面上传
直播封面上传功能有以下几个:
运行时权限验证
上传本地图片
上传相机图片
1、运行时权限验证
PublishPresenter # checkPublishPermission()
//1、权限通过 ActivityCompat 类的 checkSelfPermission() 方法判断是否有所需权限。//2、权限请求是通过 ActivityCompat 类中的 requestPermissions() 方法,在OnRequestPermissionsResultCallback # onRequestPermissionsResult() 方法中回调。//----------------------------split line---------------------------------------@Overridepublic boolean checkPublishPermission(Activity activity) { if(Build.VERSION.SDK_INT &= 23) { List&String& permissions = newArrayList&&(); //写入外部存储设备权限(保存封面图片)if(PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(activity, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) { permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } //相机权限if(PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(activity, Manifest.permission.CAMERA)) { permissions.add(Manifest.permission.CAMERA); } //ActivityCompat.requestPermissions() 请求权限if(permissions.size() != 0) { ActivityCompat.requestPermissions(activity , permissions.toArray(newString[0]), Constants.WRITE_PERMISSION_REQ_CODE); returnfalse; } } returntrue;}
PublishActivity # onRequestPermissionsResult()
onRequestPermissionsResult() 处理请求权限
@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){ super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch(requestCode) { //写入外部存储权限caseConstants.WRITE_PERMISSION_REQ_CODE: for(intret : grantResults) { if(ret != PackageManager.PERMISSION_GRANTED) { return; } } mPermission = true; break; }}
2、上传图片(相机、本地)
依然采用 MVP 架构。
【从 0 开始开发一款直播 APP】5.1 MVP 完全解析 — 实现直播登录
View — IPublishViewpublicinterfaceIPublishViewextendsBaseView{ Activity getActivity(); /** * 定位成功 * @param location 位置 */void doLocationSuccess(String location); /** * 定位失败 */void doLocationFailed(); /** * 图片上传成功 * @param url 路径 */void doUploadSuccess(String url); /** * 图片上传失败 * @param url 路径 */void doUploadFailed(String url); /** * 结束页面 */void finishActivity();}
Presenter — IPublishPresenterpublicabstractclass IPublishPresenter implements BasePresenter { protectedBaseView mBaseV public IPublishPresenter(BaseView baseView){ mBaseView = baseV } /** * 检查推流权限 * @param activity * @return */public abstract boolean checkPublishPermission(Activity activity); /** * 裁剪图片 * @param imgUri 图片地址 * @return */public abstract Uri cropImage(Uri imgUri); /** * 选择图片方式:相机、相册 * @param mPermission 权限 * @param type 类型 * @return */public abstract Uri pickImage(boolean mPermission,int type); /** * 上传图片 * @param path 图片路径 */public abstract void doUploadPic(String path);}
图片上传请求实体类
图片要上传到服务端,就需要请求网络,对图片上传封装一个请求实体。
publicclass UploadPicRequest extends IRequest { //http://live.demo.cniao5.com/Api/Image/upload//请求参数:userId type filepublic UploadPicRequest(int requestId, String userId, int type, File file)throws FileNotFoundException { mRequestId = requestId; mParams.put("userId",userId); mParams.put("type",type); mParams.put("file",file); } @Overridepublic String getUrl(){ returngetHost() + "Image/upload"; } @Overridepublic Type getParserType(){ returnnewTypeToken&Response&UploadResp&&() {}.getType(); }}
PublishPresenter 具体实现
图片裁剪请查看:详细解释如何通过Android自带的方式来实现图片的裁剪——原理分析+解决方案(http://www.cnblogs.com/tianzhijiexian/p/4059006.html)
publicclass PublishPresenter extends IPublishPresenter { privateIPublishView mIPublishV privatebooleanmUploading = false; privateString TAG = PublishPresenter.class.getSimpleName(); public PublishPresenter(IPublishView iPublishView){ super(iPublishView); this.mIPublishView = iPublishV } @Overridepublic void start(){ } @Overridepublic void finish(){ mIPublishView.finishActivity(); } /** * 直接调用系统的图片裁剪功能 * @param uri * @return */@Overridepublic Uri cropImage(Uri uri){ Uri cropUri = createCoverUri("_crop"); Intent intent = newIntent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*");//可以选择图片类型,如果是 * 表明所有类型的图片intent.putExtra("crop", "true");//设置在开启的Intent中设置显示的 view 可裁剪intent.putExtra("aspectX", 750);//裁剪图片的比例intent.putExtra("aspectY", 550); intent.putExtra("outputX", 750);//裁剪图片的宽intent.putExtra("outputY", 550); intent.putExtra("scale", true);//是否保持比例intent.putExtra("return-data", false);//是否返回bitmapintent.putExtra(MediaStore.EXTRA_OUTPUT, cropUri);//保存图片到指定uriintent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());//输出格式mIPublishView.getActivity().startActivityForResult(intent, Constants.CROP_CHOOSE);//启动裁剪功能returncropU } //存储封面图片并保存uri地址private Uri createCoverUri(String preFileName){ String filename = ImUserInfoMgr.getInstance().getUserId() + preFileName + ".jpg"; String path = Environment.getExternalStorageDirectory() + "/cniao_live"; File outputImage = newFile(path, filename); if(ContextCompat.checkSelfPermission(mIPublishView.getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(mIPublishView.getActivity(), newString[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, Constants.WRITE_PERMISSION_REQ_CODE); returnnull; } try{ File pathFile = newFile(path); if(!pathFile.exists()) pathFile.mkdirs(); if(outputImage.exists()) outputImage.delete(); } catch(Exception e) { e.printStackTrace(); mIPublishView.showMsg("生成封面失败"); } returnUri.fromFile(outputImage); } //选择封面图来源(相机、相册)@Overridepublic Uri pickImage(boolean mPermission, int type){ Uri fileUri = null; if(!mPermission) { mIPublishView.showMsg("权限不足"); returnnull; } switch(type) { //相机caseConstants.PICK_IMAGE_CAMERA: fileUri = createCoverUri(""); //启动相机Intent intent_photo = newIntent(MediaStore.ACTION_IMAGE_CAPTURE); intent_photo.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); mIPublishView.getActivity().startActivityForResult(intent_photo, Constants.PICK_IMAGE_CAMERA); break; //本地相册caseConstants.PICK_IMAGE_LOCAL: fileUri = createCoverUri("_select"); //打开相册Intent intent_album = newIntent("android.intent.action.GET_CONTENT"); intent_album.setType("image/*"); mIPublishView.getActivity().startActivityForResult(intent_album, Constants.PICK_IMAGE_LOCAL); break; } returnfileU } //上传封面图@Overridepublic void doUploadPic(String path){ mUploading = true; try{ finalUploadPicRequest request = newUploadPicRequest(1000, ACache.get(mIPublishView.getContext()).getAsString("user_id"), Constants.LIVE_COVER_TYPE,newFile(path)); AsyncHttp.instance().post(request, newAsyncHttp.IHttpListener() { @Overridepublic void onStart(int requestId){ } @Overridepublic void onSuccess(int requestId, Response response){ if(response!=null) { UploadResp resp = (UploadResp) response.getData(); Log.i(TAG, "onSuccess url:"+ resp.getUrl()); mIPublishView.doUploadSuccess(resp.getUrl()); }else{ Log.i(TAG, "onSuccess url:"); } } @Overridepublic void onFailure(int requestId, int httpStatus, Throwable error){ Log.i(TAG, "onFailure :"+ error); mIPublishView.doLocationFailed(); } }); } catch(FileNotFoundException e) { e.printStackTrace(); } }}
封面图片上传实现
整个大致流程:首先检测权限,权限添加之后点击封面图片调用封面选择对话框,会出现三个按钮(相机、相册、取消)。
相机:打开相机功能进行拍照,然后确定之后会调用系统裁剪功能对图片进行裁剪,接着会将图片进行保存,裁剪之后再点击确定就会调用上传图片功能。
相册:打开相册选择,选择之后会调用系统裁剪功能对图片进行裁剪,接着会将图片进行保存,裁剪之后再点击确定就会调用上传图片功能。
取消:点击取消则退出当前对话框。
publicclass PublishActivity extends BaseActivity implements View.OnClickListener, IPublishView{ //图片封面文字privateTextView mTvPicT privateDialog mPicD//选择封面对话框(照相机、相册、取消)privateImageView mImgC//封面图privateUri mFileUri, mCropU//原始图片文件uri,裁剪之后的图片文件uriprivatebooleanmPermission = false;//权限监测privatePublishPresenter mPublishP privateString TAG = PublishActivity.class.getSimpleName(); @Overrideprotected void setActionBar(){ } @Overrideprotected void setListener(){ mImgCover.setOnClickListener(this); } @Overrideprotected void initData(){ //初始化PublishPresentermPublishPresenter = newPublishPresenter(this); //检测权限mPermission = mPublishPresenter.checkPublishPermission(this); String strCover = ACache.get(this).getAsString("head_pic"); if(!TextUtils.isEmpty(strCover)) { Log.e(TAG, "head_pic:"+ strCover); Glide.with(this).load(strCover).into(mImgCover); mTvPicTip.setVisibility(View.GONE); } else{ mImgCover.setImageResource(R.drawable.publish_background); } } @Overrideprotected void initView(){ mTvPicTip = obtainView(R.id.tv_pic_tip); mImgCover = obtainView(R.id.cover); //初始化图片选择对话框initPhotoDialog(); } /** * 封面图片选择对话框 */private void initPhotoDialog(){ //对话框初始化及样式设置mPicDialog = newDialog(this, R.style.float_dialog); //对话框布局mPicDialog.setContentView(R.layout.dialog_pic_choose); WindowManager windowManager = getWindowManager(); Display display = windowManager.getDefaultDisplay(); Window window = mPicDialog.getWindow(); WindowManager.LayoutParams lp = window.getAttributes(); window.setGravity(Gravity.BOTTOM); lp.width = display.getWidth(); mPicDialog.getWindow().setAttributes(lp); //按钮初始化并添加点击事件mPicDialog.findViewById(R.id.tv_chose_camera).setOnClickListener(this); mPicDialog.findViewById(R.id.tv_pic_lib).setOnClickListener(this); mPicDialog.findViewById(R.id.tv_dialog_cancel).setOnClickListener(this); } @Overrideprotected int getLayoutId(){ returnR.layout.activity_ } @Overridepublic void onClick(View v){ switch(v.getId()) { //封面图片选择caseR.id.cover: mPicDialog.show(); break; //相机,对拍摄图片地址进行存储,并对图片进行裁剪caseR.id.tv_chose_camera: mFileUri = mPublishPresenter.pickImage(mPermission, Constants.PICK_IMAGE_CAMERA); mPicDialog.dismiss(); break; //相册,从本地相册选择图片作为封面,并对图片进行裁剪,并将地址进行保存caseR.id.tv_pic_lib: mFileUri = mPublishPresenter.pickImage(mPermission, Constants.PICK_IMAGE_LOCAL); mPicDialog.dismiss(); break; //取消对话框按钮,表示不添加封面图片caseR.id.tv_dialog_cancel: mPicDialog.dismiss(); break; } } //相机和相册选择结果回调@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data){ if(resultCode == RESULT_OK) { switch(requestCode) { //选择相机图片caseConstants.PICK_IMAGE_CAMERA: mCropUri = mPublishPresenter.cropImage(mFileUri); Log.d(TAG, "cropImage-&path camera:"+ mCropUri.getPath()); Log.d(TAG,"PICK_IMAGE_CAMERA 选择相机图片成功"); break; //选择本地相册图片caseConstants.PICK_IMAGE_LOCAL: String path = OtherUtils.getPath(this, data.getData()); if(null!= path) { Log.d(TAG, "cropImage-&path local:"+ path); File file = newFile(path); mCropUri = mPublishPresenter.cropImage(Uri.fromFile(file)); } Log.e(TAG,"PICK_IMAGE_LOCAL 选择本地图片成功"); break; //上传相机/相册图片caseConstants.CROP_CHOOSE: mTvPicTip.setVisibility(View.GONE); Log.d(TAG, "cropImage-&path crop:"+ mCropUri.getPath()); mPublishPresenter.doUploadPic(mCropUri.getPath()); Log.d(TAG,"CROP_CHOOSE 上传图片成功"); break; } } } @Overridepublic void doUploadSuccess(String url){ //加载封面图Glide.with(this).load(url).into(mImgCover); } @Overridepublic void doUploadFailed(String url){ showMsg("直播封面上传失败"); } //其他某些实现方法已被删,代码量太大,只贴出主要代码//......}
在控制台可以查看到打印的 Log 信息,先选择图片,然后裁剪之后进行上传。上传到服务端会返回一个 url 地址。打开 url 可以在浏览器中查看到图片。
在手机上找到 cniao_live 文件夹,并且有刚刚上传过的图片。
作者:蒋志碧,免费试学《菜鸟直播》课程链接:http://www.cniao5.com/course/10121
直播”,进入“直播APP开发交流群”
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点Sina Visitor System斗鱼怎么设置直播封面
word2003中设置奇偶页页眉、页脚的方法及步骤:① 先设置 奇数页不同.不选 首页不同.②各章之间插入分节符(分隔符--下一页)③先进入页脚,设置页码.封面,起始页为1,出现页码后删掉.目录、摘要,可使用Ⅰ、Ⅱ格式的页码.从摘要开始就要使用 页码格式(手#按钮),续前节.④之后正文页码,起始页1,阿拉伯数字.这是前
我可以帮您排好,免费的
120 译文 我在少年的时候,所居住的书房前,种有翠竹松柏以及一些花草,郁郁葱葱地长满在庭院里,许多鸟在上面筑巢.武阳君对杀生的行为很痛恨,嘱咐家里的小孩、奴婢及仆人,都不能捕捉鸟雀.几年的时间下来,鸟巢把树枝都压弯了,鸟巢里孵的小鸟低下头去都可以偷偷地看得到.四、五月的时候,还有一种叫桐花凤的鸟,飞翔在院子里,这种鸟
这是制作思路(后面还有使用技巧):基本资料(要有照片)工作经历(最好有工作过公司的照片)教育背景(学校同学的照片)获得奖项资格(能力水平)证书其它奖励自我评价,重点,要求你用多媒体制作简历就是要你自我展示,最好有录好的自我介绍的视频加进来.根据你要投递的单位选择制作风格,个人推荐严肃正式的,图片不要太花哨,要整体统一风
什么是议程设置.如果你有空,可以回去好好看看传播学,传播学里提到这个定理的.好,下面进入正题,回答问题:首先回答,议程设置的定理.议程设置:议程设置是大众传播的重要社会功能和效果之一.是通过大众媒介形成或影响舆论的理论假设.70年代,美国传播学者 麦康(McCombs,M)和肖(Shaw.D)通过实证研究发现,在公众对
  第1课 古代两河流域  1.两河流域(底格里斯河、幼发拉底河),位于西亚,即“美索不达米亚”地区.  2.古代巴比伦王国是古代两河流域最辉煌的时期.  3.公元前3500年至3100年左右,苏美尔人首先建国.  4.国家的职能:保障国家安全、调节国内社会矛盾和管理社会公共事务等(修建水利工程)  5.楔形文字、泥板
视频和音乐在线播放时用到的!缓冲大小是指数据在设备上停留的大小,如果你的网速较快可以设置小些,这样可以减少等待时间,看直播时与电视台同步更精确.如果网速较慢,设置大些,视频播放顺畅些.
目 录一、文件操作及界面二、幻灯片操作三、编辑幻灯片四、使用模版五、使用动画一、文件操作及界面Powerpoint 2003的文件操作方法(启动、退出、新建文件、打开文件、保存文件、关闭文件)与Word 2003、Excel 2003的操作方法基本相同,在此就不再详述.下面我主要讲一下PowerPoint2003的工作
成品A4的,也就是大度16开,成品尺寸是21cm*28.5cm,做的时候可以以大度8开的(A3的)文件来做,尺寸是42cm*28.5cm,出血2-3mm,做的时候设置文件尺寸为42.4/42.6*28.9/29.1都没问题,建议你是以A3的文件来做.骑马订的拼版是第1张和最后1张拼在一起,第2张是和倒数第2张相拼,按这
Photoshop是adobe公司推出的图形图像设计与处理软件,通过PS我们可以进行美术设计与制作.大家会否对书籍、报刊等封面的设计感兴趣呀?下面我将以《扬帆》16K的封面为例,向大家介绍如何在PS中制作封面.希望通过我的简单讲述,让大家懂得其制作的一般进程.下面我将介绍整个制作进程中的基础环节和要点,至于其中的细节设
又是你啊?我来告诉你:照片 可以用摄像头拍下来、没有的话用相机的数据线连接电脑就OK(加油吧)文字:设置好书写板块后打字就可以音乐 :设置后插入你想听的音乐@电子相册网址:中学快乐!
  1:缸的尺寸(缸的大小)  PK用300mm见方的缸(高度适当高一些)HM用350mm的高度250mm  2:缸内的设置(水草、加热棒、缸的摆放、光线处理等)  一团moss草,加热棒用50W足够,鱼缸摆放在向阳处,繁殖时适当遮荫,鱼缸周围用挡板,避免其他鱼的干扰  3:水(缸内的水位、酸度、水处理的方法,水的温度
朋友您好 再答: 苹果官方网站设置了直播再问: 是么网址多少 再答: 好的 再答: 麻烦您等我一下 再答: http://www.apple.com/cn/live/ 再答: 就是这个 再答: 网站上有时间再问: 那个?再问: 那个网址 再答: www.Apple.com/cn/live/ 再答: 好了再问: 我知道啦
副标题是对题目的注释或是对论文内容进一步的解说.如果要加在封面上可以把字体设置小一点,不要喧宾夺主 再问: 我封面主的标题 是宋体 小三 那副标题可以是什么?? 副标题一定要写吗在封面和开题报告中的题目栏里? 再答: 主标题字数不多的话,字体可以再大一点。如果真觉得放在封面不合适,也可以只加在开题里。可以去图书馆找先关
如果你有耐心的话,请看下去.用我的这个方法你最好新建一个空的word文档练习练习,等熟练了再去设置你的论文,虽然不难,但是……呵呵 我们以一个空白的为例.(1) 新建一个word文档,打开,也就是说目前只有一页.但是你的文章应该是分成三个部分的,封皮,目录和正文,所以……,(2)“插入”菜单---“分隔符”---“分节
神奇的礼物神奇酒店里,许多中年男女正在开怀畅饮,直诉衷肠…… 这是一次特殊的聚会.阔别多年的老友重逢,自然有许多话要说.当聚会进行到最后一个环节——老友对对碰——时,我跟儿时的好友却显得有些尴尬.看着他那怪怪的眼神,我的思路一下回到了20年前…… 20年前,他是一个很不错的男孩,可我们却因为一件小事闹翻了,因为他偷看了
广电总局对卫星进行了加密,以后会全部消失,无法接收.他们这种做法是损害4千万用户的利益,大家都在骂光电
08年下半年党刊封面人物及事迹:安徽省六安市金安区绿化办主任周世友 抗震英雄胡顺扬济南军区铁军师英雄战士柳德占藏族抗震英雄龙德强……中共历届全国代表大会召开的时间地点详查:http://www.people.com.cn/GB/shizheng/252/5089/中国共产党历次全国代表大会 第十七次
InDesign中与页面设置相关的问题[B]在InDesign中能否像Word或者PageMaker那样很方便地插入页脚和页眉? [/B] 完全可以.InDesign提供了激动人心的“主页”功能,按住快捷键“F12”可以调出“主页”控制面板.在“主页”里,你可以建立不止1个的主页并分配给不同的章节或者页面,灵活的主页控
首先重新设置一下,启动自动发音.如果还不行就要看看你按没安Adobe Flash Playe的插件,我下载了这个之后就可以发音了.这样可以么?映客直播怎么改封面?
映客直播怎么换封面?映客直播封面设置错了怎么换?
  很多网友都知道用户开启直播之前,需要给自己设置一个拉风、好记的封面。不过,如果对当时设置的封面不满意,或者设置错了,该怎么办呢?那么,映客直播封面设置错了怎么换?一起来看看今天的教程吧!
  问:映客直播怎么换封面?
  答:映客直播换封面的方法:就是重新开启直播视频,具体步骤如下:
  1、打开映客直播APP,然后点击最下面中间的直播按钮。
  2、进入直播界面后先需要为你的直播封面拍张照,点击拍摄封面,拍摄完成即为你的直播设置的了封面哟。
大家都在下
还没关注下载之家微信 的亲们赶紧扫一扫左侧的二维码吧!或搜账号:
还没关注下载之家微信 的亲们赶紧扫一扫左侧的二维码吧!或搜账号:
微信公众号
Copyright &
下载之家(www.xiazaizhijia.com).All Rights Reserved
备案号:闽ICP备号-1 闽公网安备 72号您所在的位置:
  你们知道在映客直播中如何换封面吗?今天小编就讲解一下在映客直播中换封面的具体操作,一起来看看吧。
  映客直播怎么换封面?
  拍摄封面
  问:映客直播怎么换封面?
  答:映客直播换封面的方法:就是重新开启直播视频,具体步骤如下:
  1、打开映客直播APP,然后点击最下面中间的直播按钮。
  2、进入直播界面后先需要为你的直播封面拍张照,点击拍摄封面,拍摄完成即为你的直播设置的了封面哟。
  以上就是在映客直播中换封面的具体操作,希望可以帮助到大家。
微信被广泛应用,那么微信收款码贴纸如何申请,下面就是小编带来...
电脑软件排行
移动软件排行
读过此文的人还看过
天极大视野
京公网安备84号

我要回帖

更多关于 为什么微博编辑多张封面编辑不了 的文章

 

随机推荐