有种需求,叫下班前实现
发送视频消息是即时通讯应用中很常见的功能,现在的视频播放场景五花八门,眼瞅快下班,接到产品需求
如何实现这个需求,好准点下班回家抢显卡 ,快速提升自己的工作效率,那你一定要熟读本篇文章,分分钟带你实现!
前提条件:
- 完成环信IM SDK的初始化
(没完成的参考文档:SDK初始化) - 完成发送视频消息和接收视频消息的操作
(没完成的参考文档:发送和接收消息)
实现方法:
一、本地播放实现方法
1、调用EMChatManager#downloadAttachment
下载,下载成功后进行播放处理;
EMMessage msg = EMClient.getInstance().chatManager().getMessage(msgId);EMCallBack callback = new EMCallBack() {public void onSuccess() {EMLog.e(TAG, "onSuccess" );//下载成功,进行播放处理}public void onError(final int error, String message) {EMLog.e(TAG, "offline file transfer error:" + message);}public void onProgress(final int progress, String status) {EMLog.d(TAG, "Progress: " + progress);}};msg.setMessageStatusCallback(callback);EMClient.getInstance().chatManager().downloadAttachment(msg);
2、如果对本地存储的路径有特殊要求:
1)可以先通过EMFileMessageBody#setlocalUrl
去修改路径;
2)再调用EMChatManager#downloadAttachment
下载(下载操作可以参考上面);
二.在线播放实现方法
1、在接收消息监听onMessageReceived
里,接收到视频消息;
EMMessageListener msgListener = new EMMessageListener() {// 收到消息,遍历消息队列,解析和显示。@Overridepublic void onMessageReceived(List<EMMessage> messages) {}};// 注册消息监听EMClient.getInstance().chatManager().addMessageListener(msgListener);// 解注册消息监听EMClient.getInstance().chatManager().removeMessageListener(msgListener);
2、拿到EMVideoMessageBody#getRemoteUrl
拿到消息的远程服务器存储地址
// 从服务器端获取视频文件。
String imgRemoteUrl = ((EMVideoMessageBody) body).getRemoteUrl();
3、用第三方或者是VideoView进行播放视频(例子里使用的VideoView);
vidw = (VideoView) findViewById(R.id.viewview);vidw.setVideoPath(imgRemoteUrl+"?em-redirect=true");vidw.setOnErrorListener(new MediaPlayer.OnErrorListener() {@Overridepublic boolean onError(MediaPlayer mp, int what, int extra) {return true;}});vidw.start();
按照上面的步骤测试,发现还是不能在线播放的朋友,就需要看下,你使用的Appkey是否联系过环信商务经理免费开通在线播放功能
有一个小坑需要注意下:imgRemoteUrl
是需要拼接 ?em-redirect=true
,否则也会出现播放不了的情况;
大功告成!快把代码推上去,回家抢显卡!
对了,此教程适用于Android端,其他端兄弟们报一丝,下次一定。
相关文档:
-
注册环信即时通讯IM:https://console.easemob.com/user/register
-
环信IM集成文档:https://docs-im-beta.easemob.com/document/ios/quickstart.html