一、接入前准备
- 下载ShareREC SDK地址 :下载Android_unity3d和iOS_unity3d
- android集成文档 ---- ios集成文档
二、Android端
将下载的ShareRec-xxx-for-Unity.unitypackage导入工程中,将ShareREC组件加入场景中,配置参数如下(Key和Secret填入在mob注册应用的信息):
shareREC参数设置.png
之后按照文档只需调用相应的开启录制结束录制方法即可以实现录制
// 判断是否支持录制,在启动录制之前判断(在虚拟机上不可用一直false)
ShareREC.IsAvailable();
// 启动录制
ShareREC.StartRecorder();
// 暂停录制
ShareREC.PauseRecorder();
// 恢复录制
ShareREC.ResumeRecorder();
// 停止录制
ShareREC.StopRecorder();
2.1 接入中遇到的问题
- 按照文档的配置完成后,在真机上测试IsAvailable()一直返回false,shareREC的demo工程可以运行,这种情况下,修改打包选项playerSeeting中的设置,下面是配置项:
shareRec Seeting设置.png
- 重要的是矩形框里的设置,Multuthreaded Rendering、 Graphics Jobs、 Protect Graphics Memory设置错误在录制结束时会闪退
在plugins/Android/ShareREC中的AndroidManifest文件中<application>节点下加上秘钥信息:<meta-data android:name="Mob-AppKey" android:value="xxx"/> <meta-data android:name="Mob-AppSecret" android:value="xxx"/>
- 在固定屏幕方向为横屏时,通过ShareREC.ShowVideoCenter()打开视频中心播放视频程序会崩溃,竖屏下不会,没找到shareRec具体原因,只得通过再打开shareREC的页面时候改变屏幕方向,在页面返回的回调
Screen.orientation = ScreenOrientation.Portrait;
三、加入shareSDK分享
下载shareSDK导入,有几点需要注意
- 在导入shareREC的时候的时候Plugins/Android/shareRec下和ShareSDK重复的jar包需要删除,打包过程中AndroidManifest文件中冲突的部分也要删除
ShareREC下jar包一览.png
ShareSDK下jar包一览.png
- shareSdk中的一个jar包需要在android环境下重新生成jar替换,清单文件中包名、key信息也要改,以后会整理一篇详细说明
- 分享模块配置完成后,在录制完成后调用ShareREC.ShowShare ()如果分享的结果是一张图片,检查清单文件中是否正确加入mob的key信息(2.1),同时在shareRec组件挂载的物体上加上shareSDK组件,组件上的ByPass Approval设置为false,表示不绕过微信的包名签名验证,同时正确填入申请的微信的key信息,测试时把生成的包按照微信开发平台填写的包进行签名,因为分享视频的时候不能绕过验证 附:不同平台分享内容的详细说明
四、接入iOS ShareREC
- 导入在导入ios的shareREC包时千万不要直接覆盖,否则会把android的ShareREC文件覆盖(ios和android的ShareREC脚本不同),如果导入前已经导入过ShareSDK包,要取消勾选MiniJson(shareSDK中有),Editor下的sdk目录不勾选是因为编译成ios工程时在Xcode打开库工程并未加入,还需手动导入,所以在unity中就不加入了;
iOS端导入ShareREC文件.png
- 没有导入ios的ShareREC.cs是因为会覆盖,更名后复制内容加入工程,让人想吐槽的是这个文件有两处还是错误的,更正后如下。这个脚本也需要挂载在场景中iOS才能分享
using UnityEngine;
using System.Collections;
using System;
namespace com.mob
{
/// <summary>
/// Finished record event.
/// </summary>
public delegate void FinishedRecordEvent (Exception ex);
/// <summary>
/// Close event.
/// </summary>
public delegate void CloseEvent ();
/// <summary>
/// Edit result event.
/// </summary>
public delegate void EditResultEvent (bool cancelled);
/// <summary>
///Custom platform event
/// </summary>
public delegate void CustomPlatformEvent(string platformName, string title, Hashtable recording);
public delegate void ShareEvent (SocialShareState state);
public delegate void ConfirmEditLastRecordingResultEvent (string mainVideoPath);
public enum SocialPageType
{
Share = 0, // share
ViewCenter = 1, // video center
Profile = 2 // profile
}
public enum SocialShareState
{
ShareStateBegin = 0,
ShareStateSuccess = 1,
ShareStateFail = 2,
ShareStateCancel = 3
}
/// <summary>
/// Share rec.
/// </summary>
public class ShareRecIOs : MonoBehaviour
{
/// <summary>
/// _callback the specified data.
/// </summary>
/// <param name="data">Data.</param>
private void shareRECCallback (string data)
{
if (Application.platform == RuntimePlatform.IPhonePlayer)
{
#if UNITY_IPHONE
ShareRECIOS.shareRECCallback(data);
#endif
}
else if (Application.platform == RuntimePlatform.Android)
{
#if UNITY_ANDROID
#endif
}
}
/// <summary>
/// Sets the name of the callback object.
/// </summary>
/// <param name="objectName">Object name.</param>
public static void setCallbackObjectName(string objectName)
{
if (objectName == null)
{
objectName = "Main Camera";
}
if (Application.platform == RuntimePlatform.IPhonePlayer)
{
#if UNITY_IPHONE
ShareRECIOS.setCallbackObjectName(objectName);
#endif
}
else if (Application.platform == RuntimePlatform.Android)
{
#if UNITY_ANDROID
#endif
}
}
/// <summary>
/// Pause the recoring.
/// </summary>
public static void pauseRecoring ()
{
#if UNITY_IPHONE
ShareRECIOS.pauseRecoring();
#elif UNITY_ANDROID
#endif
}
/// <summary>
/// Resume the recoring.
/// </summary>
public static void resumeRecoring ()
{
#if UNITY_IPHONE
ShareRECIOS.resumeRecoring();
#elif UNITY_ANDROID
#endif
}
/// <summary>
/// Starts the recoring.
/// </summary>
public static void startRecoring ()
{
#if UNITY_IPHONE
ShareRECIOS.startRecording();
#elif UNITY_ANDROID
#endif
}
/// <summary>
/// Stops the recording.
/// </summary>
public static void stopRecording (FinishedRecordEvent evt)
{
#if UNITY_IPHONE
ShareRECIOS.stopRecording(evt);
#elif UNITY_ANDROID
#endif
}
/// <summary>
/// Plaies the last recording.
/// </summary>
public static void playLastRecording()
{
#if UNITY_IPHONE
ShareRECIOS.playLastRecording();
#elif UNITY_ANDROID
#endif
}
/// <summary>
/// Sets the bit rate.
/// </summary>
/// <param name="bitRate">Bit rate.</param>
public static void setBitRate(int bitRate)
{
#if UNITY_IPHONE
ShareRECIOS.setBitRate(bitRate);
#elif UNITY_ANDROID
#endif
}
/// <summary>
/// Sets the FPS.
/// </summary>
/// <param name="fps">Fps.</param>
public static void setFPS(int fps)
{
#if UNITY_IPHONE
ShareRECIOS.setFPS(fps);
#elif UNITY_ANDROID
#endif
}
/// <summary>
/// Sets the minimum recording time.
/// </summary>
/// <param name="time">Time.</param>
public static void setMinimumRecordingTime(float time)
{
#if UNITY_IPHONE
ShareRECIOS.setMinimumRecordingTime(time);
#elif UNITY_ANDROID
#endif
}
/// <summary>
/// Lasts the recording path.
/// </summary>
/// <returns>The recording path.</returns>
public static string lastRecordingPath()
{
#if UNITY_IPHONE
return ShareRECIOS.lastRecordingPath();
#elif UNITY_ANDROID
#endif
return null;
}
/// <summary>
/// Edits the lasting recording.