Log in or register to post comments

Playing Video from url metadata

December 17, 2015 - 8:31am #1

I know that this topic has been brought up many times in the forums, but I can't find the answer that I'm looking for.  I'm trying to play a video by using the string stored in the metadata attached to one of the image targets.  I have a script that I know works when I enter a URL directly, but when I call the Load() method from the MediaPlayerCtrl class, and pass it targetSearchResult.MetaData, it doesn't load the video.  I know that I have a valid string when I run Debug.Log ("preparing to load" + targetSearchResult.MetaData); it displays the url I want.  I have attached the two scripts I'm using.  Any help would be greatly appreciated as I've been stuck on this problem for 6 days now, and spent countless hours looking for any help in previous posts on this forum. 

 

 

/*==============================================================================

Copyright (c2012-2014 Qualcomm Connected ExperiencesInc.
All Rights Reserved.
==============================================================================*/

using System;
using UnityEngine;
using Vuforia;

/// <summary>
/// This MonoBehaviour implements the Cloud Reco Event handling for this sample.
/// It registers itself at the CloudRecoBehaviour and is notified of new search results as well as error messages
/// The current state is visualized and new results are enabled using the TargetFinder API.
/// </summary>
public class CloudRecoEventHandler : MonoBehaviourICloudRecoEventHandler
{
    #region PRIVATE_MEMBER_VARIABLES

    // ObjectTracker reference to avoid lookups
    private ObjectTracker mObjectTracker;
    private ContentManager mContentManager;
    private MediaPlayerCtrl mpc;
    // the parent gameobject of the referenced ImageTargetTemplate - reused for all target search results
    private GameObject mParentOfImageTargetTemplate;

    #endregion // PRIVATE_MEMBER_VARIABLES

    #region EXPOSED_PUBLIC_VARIABLES

    /// <summary>
    /// can be set in the Unity inspector to reference a ImageTargetBehaviour that is used for augmentations of new cloud reco results.
    /// </summary>
    public ImageTargetBehaviour ImageTargetTemplate;

    #endregion

    #region ICloudRecoEventHandler_IMPLEMENTATION

    /// <summary>
    /// called when TargetFinder has been initialized successfully
    /// </summary>
    public void OnInitialized()
    {
        // get a reference to the Object Trackerremember it
        mObjectTracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
        mContentManager = (ContentManager)FindObjectOfType(typeof(ContentManager));
    }

    /// <summary>
    /// visualize initialization errors
    /// </summary>
    public void OnInitError(TargetFinder.InitState initError)
    {
        switch (initError)
        {
            case TargetFinder.InitState.INIT_ERROR_NO_NETWORK_CONNECTION:
                ErrorMsg.New("Network Unavailable""Please check your internet connection and try again."RestartApplication);
                break;
            case TargetFinder.InitState.INIT_ERROR_SERVICE_NOT_AVAILABLE:
                ErrorMsg.New("Service Unavailable""Failed to initialize app because the service is not available.");
                break;
        }
    }
    
    /// <summary>
    /// visualize update errors
    /// </summary>
    public void OnUpdateError(TargetFinder.UpdateState updateError)
    {
        switch (updateError)
        {
            case TargetFinder.UpdateState.UPDATE_ERROR_AUTHORIZATION_FAILED:
                ErrorMsg.New("Authorization Error","The cloud recognition service access keys are incorrect or have expired.");
                break;
            case TargetFinder.UpdateState.UPDATE_ERROR_NO_NETWORK_CONNECTION:
                ErrorMsg.New("Network Unavailable","Please check your internet connection and try again.");
                break;
            case TargetFinder.UpdateState.UPDATE_ERROR_PROJECT_SUSPENDED:
                ErrorMsg.New("Authorization Error","The cloud recognition service has been suspended.");
                break;
            case TargetFinder.UpdateState.UPDATE_ERROR_REQUEST_TIMEOUT:
                ErrorMsg.New("Request Timeout","The network request has timed out, please check your internet connection and try again.");
                break;
            case TargetFinder.UpdateState.UPDATE_ERROR_SERVICE_NOT_AVAILABLE:
                ErrorMsg.New("Service Unavailable","The service is unavailable, please try again later.");
                break;
            case TargetFinder.UpdateState.UPDATE_ERROR_TIMESTAMP_OUT_OF_RANGE:
                ErrorMsg.New("Clock Sync Error","Please update the date and time and try again.");
                break;
            case TargetFinder.UpdateState.UPDATE_ERROR_UPDATE_SDK:
                ErrorMsg.New("Unsupported Version","The application is using an unsupported version of Vuforia.");
                break;
        }
    }

    /// <summary>
    /// when we start scanningunregister Trackable from the ImageTargetTemplatethen delete all trackables
    /// </summary>
    public void OnStateChanged(bool scanning)
    {
        if (scanning)
        {
            // clear all known trackables
            mObjectTracker.TargetFinder.ClearTrackables(false);

            // hide the ImageTargetTemplate
            mContentManager.ShowObject(false);
        }
    }
    
    /// <summary>
    /// Handles new search results
    /// </summary>
    /// <param name="targetSearchResult"></param>
    public void OnNewSearchResult(TargetFinder.TargetSearchResult targetSearchResult)
    {
        // This code demonstrates how to reuse an ImageTargetBehaviour for new search results and modifying it according to the metadata
        // Depending on your applicationit can make more sense to duplicate the ImageTargetBehaviour using Instantiate(), 
        // or to create a new ImageTargetBehaviour for each new result

        // Vuforia will return a new object with the right script automatically if you use
        // TargetFinder.EnableTracking(TargetSearchResult resultstring gameObjectName)
        
        //Check if the metadata isn't null
        if(targetSearchResult.MetaData == null)
        {
            return;
        }
        mObjectTracker.TargetFinder.ClearTrackables (false);
        ImageTargetBehaviour imageTargetBehaviour = mObjectTracker.TargetFinder.EnableTracking (targetSearchResultmParentOfImageTargetTemplateas ImageTargetBehaviour;
        if (targetSearchResult.MetaData != null) {
            // First clear all trackables

            // enable the new result with the same ImageTargetBehaviour:
            mpc.Load (targetSearchResult.MetaData);
            Debug.Log ("preparing to load" + targetSearchResult.MetaData);

        }
        
    }

    #endregion // ICloudRecoEventHandler_IMPLEMENTATION

    #region UNTIY_MONOBEHAVIOUR_METHODS

    /// <summary>
    /// register for events at the CloudRecoBehaviour
    /// </summary>
    void Start()
    {
        // look up the gameobject containing the ImageTargetTemplate:
        mParentOfImageTargetTemplate = ImageTargetTemplate.gameObject;

        // intialize the ErrorMsg class
        ErrorMsg.Init();

        // register this event handler at the cloud reco behaviour
        CloudRecoBehaviour cloudRecoBehaviour = GetComponent<CloudRecoBehaviour>();
        if (cloudRecoBehaviour)
        {
            cloudRecoBehaviour.RegisterEventHandler(this);
        }
    }

    /// <summary>
    /// draw the sample GUI and error messages
    /// </summary>
    void OnGUI()
    {
        // draw error messages in case there were any
        ErrorMsg.Draw();
    }

    #endregion UNTIY_MONOBEHAVIOUR_METHODS

    #region PRIVATE_METHODS
    
    // callback for network-not-available error message
    private void RestartApplication()
    {
        Application.LoadLevel("Vuforia-1-About");
    }
    #endregion PRIVATE_METHODS
}

 

------------------------------------------------------------------------------------------

MediaPlayerCtrl Class where i'm trying to call Load()

------------------------------------------------------------------------------------------

using UnityEngine;
using System.Runtime.InteropServices;
using System;
using System.Collections;

public class MediaPlayerCtrl : CloudRecoEventHandler {
    
    public string m_strFileName;
    public GameObject m_TargetMaterial = null
    private Texture2D m_VideoTexture = null;
    private Texture2D m_VideoTextureDummy = null;
    private MEDIAPLAYER_STATE m_CurrentState;
    private int m_iCurrentSeekPosition;
    
    public bool m_bFullScreen = false;//Please use only in FullScreen prefab.
    public bool m_bSupportRockchip = true//Using a device support Rochchip or Low-end devices
    //(Reason 1 : Not directly play in StreamingAssets)
    //(Reason 2 : Video buffer is RGB565 only supported)
    
    public delegate void VideoEnd();
    public delegate void VideoReady();
    
    public VideoReady OnReady;
    public VideoEnd OnEnd;
    #if UNITY_IPHONE
    
    private int m_iPauseFrame;
    #endif
    
    
    #if UNITY_ANDROID && !UNITY_EDITOR && UNITY_5
    [DllImport ("BlueDoveMediaRender")]
    private static extern void InitNDK();
    #endif
    
    private int m_iAndroidMgrID;
    
    
    
    public enum MEDIAPLAYER_ERROR
    {
        MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200,
        MEDIA_ERROR_IO           = -1004,
        MEDIA_ERROR_MALFORMED    = -1007,
        MEDIA_ERROR_TIMED_OUT    = -110,
        MEDIA_ERROR_UNSUPPORTED  = -1010,
        MEDIA_ERROR_SERVER_DIED  = 100,
        MEDIA_ERROR_UNKNOWN      = 1
    }
    
    public enum MEDIAPLAYER_STATE
    {
        NOT_READY       = 0,
        READY           = 1,
        END             = 2,
        PLAYING         = 3,
        PAUSED          = 4,
        STOPPED         = 5,
        ERROR           = 6
    }
    
    public enum MEDIA_SCALE
    {
        SCALE_X_TO_Y    = 0,
        SCALE_X_TO_Z    = 1,
        SCALE_Y_TO_X    = 2,
        SCALE_Y_TO_Z    = 3,
        SCALE_Z_TO_X    = 4,
        SCALE_Z_TO_Y    = 5,
    }
    
    bool m_bFirst = false;
    
    public MEDIA_SCALE m_ScaleValue;
    public GameObject m_objResize = null;
    public bool m_bLoop = false;
    public bool m_bAutoPlay = true;
    private bool m_bStop = false;

    public bool m_bInit = false;
    
    
    
    void Awake(){
        
        
        
        ifSystemInfo.deviceModel.Contains("rockchip"))
        {
            m_bSupportRockchip = true;
        }
        else
        {
            m_bSupportRockchip = false;
        }
        
        #if UNITY_IPHONE
        
        if(m_TargetMaterial!=null)
        {
            Vector2 [] vec2UVsm_TargetMaterial.GetComponent<MeshFilter>().mesh.uv;
            
            for(int i = 0i < vec2UVs.Lengthi++)
            {
                vec2UVs[i] = new Vector2(vec2UVs[i].x1.0f -vec2UVs[i].y);
            }
            
            m_TargetMaterial.GetComponent<MeshFilter>().mesh.uv = vec2UVs;
        }
        
        
        #endif        
        
    }
    // Use this for initialization
    void Start () {
        
        #if UNITY_ANDROID && !UNITY_EDITOR 
        
        #if UNITY_5
        ifSystemInfo.graphicsMultiThreaded == true)
            InitNDK();
        #endif
        m_iAndroidMgrID = Call_InitNDK();
        #endif
        
        Call_SetUnityActivity();
        
        
        
        
        
        
        
        #if UNITY_ANDROID
        if (Application.dataPath.Contains(".obb")) {
            
            Call_SetSplitOBB(true,Application.dataPath);
        }
        else
        {
            Call_SetSplitOBB(falsenull);
        }
        #endif

        m_bInit = true;
        
    }
    
    
    void OnApplicationQuit()
    {
        
        ifSystem.IO.Directory.ExistsApplication.persistentDataPath + "/Data" ) == true)
            System.IO.Directory.DeleteApplication.persistentDataPath + "/Data"true);
    }
    
    bool m_bCheckFBO = false;
    
    void Update()
    {
        
        ifstring.IsNullOrEmpty(m_strFileName) )
        {
            return;
        }
        
        
        if(m_bFirst == false)
        {
            
            
            
            
            
            string strName = m_strFileName.Trim();
            
            #if UNITY_IPHONE
            /*if (strName.StartsWith("http",StringComparison.OrdinalIgnoreCase))
            {
                StartCoroutineDownloadStreamingVideoAndLoad(strName) );
            }
            else*/
            {

                Debug.Log ("Load : " +m_strFileName);
                Call_Load(strName,0);
            }
            
            #endif
            #if UNITY_ANDROID
            
            if(m_bSupportRockchip)
            {
                Call_SetRockchip(m_bSupportRockchip);
                
                if(strName.Contains("://"))
                {
                    Call_Load(strName,0);
                }
                else
                {
                    //Call_Load(strName,0);
                    StartCoroutineCopyStreamingAssetVideoAndLoad(strName));
                }
                
            }
            else
            {
                Call_Load(strName,0);
            }
            
            
            #endif
            Call_SetLooping(m_bLoop);
            m_bFirst = true;
            
            
        }
        
        
        if(m_CurrentState == MEDIAPLAYER_STATE.PLAYING || m_CurrentState == MEDIAPLAYER_STATE.PAUSED)
        {
            if(m_bCheckFBO == false)
            {
                if(Call_GetVideoWidth() <= 0 || Call_GetVideoHeight() <= 0)
                {
                    return;
                }
                
                Resize();
                
                if(m_VideoTexture != null)
                {
                    
                    //Destroy(m_VideoTexture);
                    
                    ifm_VideoTextureDummy != null)
                    {
                        Destroy(m_VideoTextureDummy);
                        m_VideoTextureDummy = null;
                    }
                    
                    m_VideoTextureDummy = m_VideoTexture;
                    m_VideoTexture = null;
                    
                    
                }
                
                #if UNITY_ANDROID
                if(m_bSupportRockchip)
                {
                    m_VideoTexture = new Texture2D(Call_GetVideoWidth(),Call_GetVideoHeight(),TextureFormat.RGB565,false);
                    
                }
                else
                {
                    m_VideoTexture = new Texture2D(Call_GetVideoWidth(),Call_GetVideoHeight(),TextureFormat.RGBA32,false);
                }
                
                m_VideoTexture.filterMode = FilterMode.Bilinear;
                m_VideoTexture.wrapMode = TextureWrapMode.Clamp;
                
                Call_SetUnityTexture(m_VideoTexture.GetNativeTextureID());
                #endif
                Call_SetWindowSize();
                m_bCheckFBO = true;
                
            }
            
            
            Call_UpdateVideoTexture();
            
            
            
            m_iCurrentSeekPosition = Call_GetSeekPosition();
            
            
            ifm_strFileName.StartsWith("rtsp",StringComparison.OrdinalIgnoreCase) || m_strFileName.StartsWith("http",StringComparison.OrdinalIgnoreCase))
            {
            }
            else
            {
                if(m_iCurrentSeekPosition > (Call_GetDuration() - 500) & m_bLoop == true & (m_CurrentState == MEDIAPLAYER_STATE.PLAYING))
                {
                    SeekTo(0);
                }
                
            }
            
        }
        
        
        
        if(m_CurrentState != Call_GetStatus() )
        {
            
            m_CurrentState = Call_GetStatus();
            
            
            
            if(m_CurrentState == MEDIAPLAYER_STATE.READY)
            {
                
                if(OnReady != null)
                    OnReady();
                
                if(m_bAutoPlay)
                    Call_Play (0);
                
                
                
            }
            else if(m_CurrentState == MEDIAPLAYER_STATE.END)
            {
                if(OnEnd != null)
                    OnEnd();
                
                if(m_bLoop == true)
                {
                    Call_Play(0);
                }
            }
            else if(m_CurrentState == MEDIAPLAYER_STATE.ERROR)
            {
                OnError( (MEDIAPLAYER_ERROR)Call_GetError() ,(MEDIAPLAYER_ERROR)Call_GetErrorExtra() );
            }
            
        }
        
        
    }
    
    public void Resize()
    {
        if(m_CurrentState != MEDIAPLAYER_STATE.PLAYING)
            return;
        
        if(m_objResize != null)
        {
            int iScreenWidth = Screen.width;
            int iScreenHeight = Screen.height;
            
            float fRatioScreen = (float)iScreenHeight / (float)iScreenWidth;
            int iWidth = Call_GetVideoWidth();
            int iHeight = Call_GetVideoHeight();
            
            float fRatio = (float)iHeight / (float)iWidth;
            float fRatioResult = fRatioScreen / fRatio;
            
            
            if(m_bFullScreen)
            {
                if(fRatio < 1.0f)
                {
                    iffRatioScreen < 1.0f)
                    {
                        iffRatio > fRatioScreen)
                        {
                            m_objResize.transform.localScale *= fRatioResult;
                        }
                    }
                    
                    m_ScaleValue = MEDIA_SCALE.SCALE_X_TO_Y;
                }
                else
                {
                    iffRatioScreen > 1.0f)
                    {
                        iffRatio > fRatioScreen)
                        {
                            m_objResize.transform.localScale *= fRatioResult;
                        }
                    }
                    
                    m_ScaleValue = MEDIA_SCALE.SCALE_Y_TO_X;
                }
            }
            
            
            
            ifm_ScaleValue == MEDIA_SCALE.SCALE_X_TO_Y)
            {
                m_objResize.transform.localScale 
                    = new Vector3(m_objResize.transform.localScale.x
                                  ,m_objResize.transform.localScale.x * fRatio
                                  ,m_objResize.transform.localScale.z);
            }
            else ifm_ScaleValue == MEDIA_SCALE.SCALE_X_TO_Z)
            {
                m_objResize.transform.localScale 
                    = new Vector3(m_objResize.transform.localScale.x
                                  ,m_objResize.transform.localScale.y
                                  ,m_objResize.transform.localScale.x * fRatio);
            }
            else ifm_ScaleValue == MEDIA_SCALE.SCALE_Y_TO_X)
            {
                m_objResize.transform.localScale 
                    = new Vector3(m_objResize.transform.localScale.y / fRatio
                                  ,m_objResize.transform.localScale.y
                                  ,m_objResize.transform.localScale.z);
            }
            else ifm_ScaleValue == MEDIA_SCALE.SCALE_Y_TO_Z)
            {
                m_objResize.transform.localScale 
                    = new Vector3(m_objResize.transform.localScale.x
                                  ,m_objResize.transform.localScale.y
                                  ,m_objResize.transform.localScale.y / fRatio);
            }
            else ifm_ScaleValue == MEDIA_SCALE.SCALE_Z_TO_X)
            {
                m_objResize.transform.localScale 
                    = new Vector3(m_objResize.transform.localScale.z * fRatio
                                  ,m_objResize.transform.localScale.y
                                  ,m_objResize.transform.localScale.z);
            }
            else ifm_ScaleValue == MEDIA_SCALE.SCALE_Z_TO_Y)
            {
                m_objResize.transform.localScale 
                    = new Vector3(m_objResize.transform.localScale.x
                                  ,m_objResize.transform.localScale.z * fRatio
                                  ,m_objResize.transform.localScale.z);
            }
            else 
            {
                m_objResize.transform.localScale 
                    = new Vector3(m_objResize.transform.localScale.x,m_objResize.transform.localScale.y,m_objResize.transform.localScale.z);
            }
            
        }
    }
    
    
    
    //The error code is the following sites related documents.
    //http://developer.android.com/reference/android/media/MediaPlayer.OnErrorListener.html 
    void OnError ( MEDIAPLAYER_ERROR iCode , MEDIAPLAYER_ERROR iCodeExtra)
    {
        string strError = "";
        
        switch (iCode)
        {
        case MEDIAPLAYER_ERROR.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
            strError = "MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK";
            break;
        case MEDIAPLAYER_ERROR.MEDIA_ERROR_SERVER_DIED:
            strError = "MEDIA_ERROR_SERVER_DIED";
            break;
        case MEDIAPLAYER_ERROR.MEDIA_ERROR_UNKNOWN:
            strError = "MEDIA_ERROR_UNKNOWN";
            break;
        default:
            strError = "Unknown error " + iCode;
            break;
        }
        
        strError += " ";
        
        switch (iCodeExtra)
        {
        case MEDIAPLAYER_ERROR.MEDIA_ERROR_IO:
            strError += "MEDIA_ERROR_IO";
            break;
        case MEDIAPLAYER_ERROR.MEDIA_ERROR_MALFORMED:
            strError += "MEDIA_ERROR_MALFORMED";
            break;
        case MEDIAPLAYER_ERROR.MEDIA_ERROR_TIMED_OUT:
            strError += "MEDIA_ERROR_TIMED_OUT";
            break;
        case MEDIAPLAYER_ERROR.MEDIA_ERROR_UNSUPPORTED:
            strError += "MEDIA_ERROR_UNSUPPORTED";
            break;
        default:
            strError = "Unknown error " + iCode;
            break;
        }
        
        
        
        Debug.LogError(strError);
        
    }
    
    
    void OnDestroy()
    {
        
        
        #if UNITY_ANDROID
        
        //Call_Reset();
        
        #endif
        Call_UnLoad();
        
        if(m_VideoTextureDummy != null)
        {
            Destroy(m_VideoTextureDummy);
            m_VideoTextureDummy = null;
        }
        
        if(m_VideoTexture != null)
            Destroy(m_VideoTexture);
        
        Call_Destroy();
        
        
    }

    bool m_bPause = false;
    
    void OnApplicationPause(bool bPause)
    {
        Debug.Log ("ApplicationPause : " +bPause);
        if(bPause == true)
        {

            ifm_CurrentState == MEDIAPLAYER_STATE.PAUSED)
            {
                m_bPause = true;
            }

            #if UNITY_IPHONE
            m_iPauseFrame = m_iCurrentSeekPosition;
            Stop();
            
            
            #else
            Call_Pause();
            #endif
            
            
        }
        else
        {
            #if UNITY_IPHONE
            m_bStop = false;
            Call_Play(m_iPauseFrame);
            #else
            Call_RePlay ();
            #endif

            ifm_bPause == true)
            {
                Call_Pause();
                m_bPause = false;
            }
            
        }
        
    }
    
    
    public MEDIAPLAYER_STATE GetCurrentState()
    {
        return m_CurrentState;
    }
    
    public Texture2D GetVideoTexture()
    {
        return m_VideoTexture;
    }
    
    public void Play()
    {
        if(m_bStop == true)
        {
            Call_Play(0);
            m_bStop = false;
        }
        
        if(m_CurrentState == MEDIAPLAYER_STATE.PAUSED  )
        {
            Call_RePlay();
        }
        else ifm_CurrentState == MEDIAPLAYER_STATE.READY || m_CurrentState == MEDIAPLAYER_STATE.STOPPED || m_CurrentState == MEDIAPLAYER_STATE.END)
        {
            Call_Play(0);
        }
    }
    
    public void Stop()
    {
        if(m_CurrentState == MEDIAPLAYER_STATE.PLAYING)
            Call_Pause();
        
        
        m_bStop = true;
        m_CurrentState = MEDIAPLAYER_STATE.STOPPED;
        m_iCurrentSeekPosition = 0;
    }
    
    public void Pause()
    {
        if(m_CurrentState == MEDIAPLAYER_STATE.PLAYING)
            Call_Pause();
        
        m_CurrentState = MEDIAPLAYER_STATE.PAUSED;
    }
    
    public void Load(string strFileName)
    {
        Debug.Log ("I'm Loading!!!!" + strFileName);
        m_bCheckFBO = false;
        
        m_strFileName = strFileName;

        ifm_bInit == false)
            return;
        
        #if UNITY_ANDROID
        
        
        
        //Call_Reset();
        
        
        
        #endif
        
        
        #if UNITY_IPHONE
        /*if (strFileName.StartsWith("http",StringComparison.OrdinalIgnoreCase))
        {
            StartCoroutine(DownloadStreamingVideoAndLoad(m_strFileName));
        }
        else*/
        {
            Call_Load(m_strFileName,0);
        }
        
        #endif
        
        #if UNITY_ANDROID
        
        if(m_bSupportRockchip)
        {
            Call_SetRockchip(m_bSupportRockchip);
            
            if(strFileName.Contains("://"))
            {
                Call_Load(strFileName,0);
            }
            else
            {
                StartCoroutineCopyStreamingAssetVideoAndLoad(strFileName));
            }
            
        }
        else
        {
            Call_Load(strFileName,0);
        }
        
        
        #endif
        
        
        m_CurrentState = MEDIAPLAYER_STATE.NOT_READY;
    }
    
    
    
    public void SetVolume(float fVolume)
    {
        ifm_CurrentState == MEDIAPLAYER_STATE.PLAYING || m_CurrentState == MEDIAPLAYER_STATE.PAUSED  || m_CurrentState == MEDIAPLAYER_STATE.END || m_CurrentState == MEDIAPLAYER_STATE.READY || m_CurrentState == MEDIAPLAYER_STATE.STOPPED)
            Call_SetVolume(fVolume);
    }
    
    //return milisecond  
    public int GetSeekPosition()
    {

        ifm_CurrentState == MEDIAPLAYER_STATE.PLAYING || m_CurrentState == MEDIAPLAYER_STATE.PAUSED  || m_CurrentState == MEDIAPLAYER_STATE.END )
            return m_iCurrentSeekPosition;
        else 
            return 0;
    }
    
    public void SeekTo(int iSeek)
    {
        ifm_CurrentState == MEDIAPLAYER_STATE.PLAYING || m_CurrentState == MEDIAPLAYER_STATE.PAUSED  || m_CurrentState == MEDIAPLAYER_STATE.END || m_CurrentState == MEDIAPLAYER_STATE.STOPPED)
            Call_SetSeekPosition(iSeek);
    }
    
    
    //Gets the duration of the file.
    //Returns
    //the duration in millisecondsif no duration is available (for exampleif streaming live content), -1 is returned.
    public int GetDuration()
    {
        ifm_CurrentState == MEDIAPLAYER_STATE.PLAYING || m_CurrentState == MEDIAPLAYER_STATE.PAUSED  || m_CurrentState == MEDIAPLAYER_STATE.END || m_CurrentState == MEDIAPLAYER_STATE.READY || m_CurrentState == MEDIAPLAYER_STATE.STOPPED)
            return Call_GetDuration();
        else 
            return 0;
    }
    
    //Get update status in buffering a media stream received through progressive HTTP download
    //The received buffering percentage indicates how much of the content has been buffered or played
    //For example a buffering update of 80 percent when half the content has already been played indicates that the next 30 percent of the content to play has been buffered.
    //the percentage (0-100of the content that has been buffered or played thus far 
    public int GetCurrentSeekPercent()
    {
        ifm_CurrentState == MEDIAPLAYER_STATE.PLAYING || m_CurrentState == MEDIAPLAYER_STATE.PAUSED  || m_CurrentState == MEDIAPLAYER_STATE.END || m_CurrentState == MEDIAPLAYER_STATE.READY)
            return Call_GetCurrentSeekPercent();
        else
            return 0;
    }
    
    public int GetVideoWidth()
    {
        return Call_GetVideoWidth();
    }
    
    public int GetVideoHeight()
    {
        return Call_GetVideoHeight();
    }
    
    public void UnLoad()
    {
        m_bCheckFBO = false;
        #if UNITY_ANDROID
        
        //Call_Reset();
        #endif
        Call_UnLoad();
        
        m_CurrentState = MEDIAPLAYER_STATE.NOT_READY;
        
    }
    
    
    
    
    #if !UNITY_EDITOR
    #if UNITY_ANDROID
    
    private AndroidJavaObject javaObj = null;
    
    private AndroidJavaObject GetJavaObject()
    {
        if (javaObj == null)
        {
            javaObj = new AndroidJavaObject("com.EasyMovieTexture.EasyMovieTexture");
        }
        
        return javaObj;
    }
    
    
    
    
    private void Call_Destroy()
    {
        #if UNITY_5
        ifSystemInfo.graphicsMultiThreaded == true)
        {
            GL.IssuePluginEvent(5 + m_iAndroidMgrID * 10 + 7000);
        }
        else
        {
            GetJavaObject().Call("Destroy");
        }
        #else
        GetJavaObject().Call("Destroy");
        #endif
        
        
    }
    
    
    private void Call_UnLoad()
    {
        #if UNITY_5
        ifSystemInfo.graphicsMultiThreaded == true)
        {
            GL.IssuePluginEvent(4 + m_iAndroidMgrID * 10 + 7000);
        }
        else
        {
            GetJavaObject().Call("UnLoad");
        }
        #else
        GetJavaObject().Call("UnLoad");
        #endif
        
        
    }
    
    private bool Call_Load(string strFileNameint iSeek)
    {
        #if UNITY_5
        ifSystemInfo.graphicsMultiThreaded == true)
        {
            GetJavaObject().Call("NDK_SetFileName"strFileName);
            GL.IssuePluginEvent(1m_iAndroidMgrID * 10 + 7000);
            Call_SetNotReady();
            
            return true;
        }
        else
        {
            GetJavaObject().Call("NDK_SetFileName"strFileName);
            return GetJavaObject().Call<bool>("Load");
        }
        #else
        GetJavaObject().Call("NDK_SetFileName"strFileName);
        return GetJavaObject().Call<bool>("Load");
        #endif
        
        
    }
    
    private void Call_UpdateVideoTexture()
    {
        
        ifCall_IsUpdateFrame() == false)
            return;
        
        if(m_VideoTextureDummy != null)
        {
            Destroy(m_VideoTextureDummy);
            m_VideoTextureDummy = null;
        }
        
        if(m_TargetMaterial)
        {
            if(m_TargetMaterial.GetComponent<MeshRenderer>().material.mainTexture != m_VideoTexture)
            {
                m_TargetMaterial.GetComponent<MeshRenderer>().material.mainTexture = m_VideoTexture;
            }
            
        }
        
        #if UNITY_5
        ifSystemInfo.graphicsMultiThreaded == true)
        {
            GL.IssuePluginEvent(3 + m_iAndroidMgrID * 10 + 7000);
        }
        else
        {
            GetJavaObject().Call("UpdateVideoTexture");
        }
        #else
        GetJavaObject().Call("UpdateVideoTexture");
        #endif
        
        
    }
    
    private void Call_SetVolume(float fVolume)
    {
        GetJavaObject().Call("SetVolume",fVolume);
    }
    
    private void Call_SetSeekPosition(int iSeek)
    {
        GetJavaObject().Call("SetSeekPosition",iSeek);
    }
    
    private int Call_GetSeekPosition()
    {
        return GetJavaObject().Call<int>("GetSeekPosition");
    }
    
    private void Call_Play(int iSeek)
    {
        GetJavaObject().Call("Play",iSeek);
    }
    
    private void Call_Reset()
    {
        GetJavaObject().Call("Reset");
    }
    
    private void Call_Stop()
    {
        GetJavaObject().Call("Stop");
    }
    
    private void Call_RePlay()
    {
        GetJavaObject().Call("RePlay");
    }
    
    private void Call_Pause()
    {
        GetJavaObject().Call("Pause");
    }
    
    private int Call_InitNDK()
    {
        return GetJavaObject().Call<int>("InitNative",GetJavaObject());
    }
    
    private int Call_GetVideoWidth()
    {
        return GetJavaObject().Call<int>("GetVideoWidth");
    }
    
    private int Call_GetVideoHeight()
    {
        return GetJavaObject().Call<int>("GetVideoHeight");
    }
    
    private bool Call_IsUpdateFrame()
    {
        return GetJavaObject().Call<bool>("IsUpdateFrame");
    }
    
    private void Call_SetUnityTexture(int iTextureID)
    {
        GetJavaObject().Call("SetUnityTexture",iTextureID);
    }
    
    private void Call_SetWindowSize()
    {
        
        #if UNITY_5
        ifSystemInfo.graphicsMultiThreaded == true)
        {
            GL.IssuePluginEvent(2 + m_iAndroidMgrID * 10 + 7000);
        }
        else
        {
            GetJavaObject().Call("SetWindowSize");
        }
        #else
        GetJavaObject().Call("SetWindowSize");
        #endif
    }
    
    private void Call_SetLooping(bool bLoop)
    {
        GetJavaObject().Call("SetLooping",bLoop);
    }
    
    private void Call_SetRockchip(bool bValue)
    {
        GetJavaObject().Call("SetRockchip",bValue);
    }
    
    
    private int Call_GetDuration()
    {
        return GetJavaObject().Call<int>("GetDuration");
    }
    
    private int Call_GetCurrentSeekPercent()
    {
        return GetJavaObject().Call<int>("GetCurrentSeekPercent");
    }
    
    private int Call_GetError()
    {
        return GetJavaObject().Call<int>("GetError");
    }
    
    private void Call_SetSplitOBB(bool bValuestring strOBBName)
    {
        GetJavaObject().Call("SetSplitOBB",bValue,strOBBName);
    }
    
    private int Call_GetErrorExtra()
    {
        return GetJavaObject().Call<int>("GetErrorExtra");
    }
    
    
    private void Call_SetUnityActivity()
    {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        GetJavaObject().Call("SetUnityActivity"jo);
        
        #if UNITY_5
        ifSystemInfo.graphicsMultiThreaded == true)
        {
            GL.IssuePluginEvent(0 + m_iAndroidMgrID * 10 + 7000);
        }
        else
        {
            Call_InitJniManager();
        }
        #else
        Call_InitJniManager();
        #endif
        
    }
    
    private void Call_SetNotReady()
    {
        GetJavaObject().Call("SetNotReady");
    }
    
    private void Call_InitJniManager()
    {
        GetJavaObject().Call("InitJniManager");
    }
    
    private MEDIAPLAYER_STATE Call_GetStatus()
    {
        return (MEDIAPLAYER_STATE)GetJavaObject().Call<int>("GetStatus");
    }
    
    
    
    #elif UNITY_IPHONE
    [DllImport("__Internal")]
    private static extern int VideoPlayerPluginCreateInstance();
    [DllImport("__Internal")]
    private static extern void VideoPlayerPluginDestroyInstance(int iID);
    [DllImport("__Internal")]
    private static extern bool VideoPlayerPluginCanOutputToTexture(string videoURL);
    [DllImport("__Internal")]
    private static extern void VideoPlayerPluginSetLoop(int iIDbool bLoop);
    [DllImport("__Internal")]
    private static extern void VideoPlayerPluginSetVolume(int iIDfloat fVolume);
    [DllImport("__Internal")]
    private static extern bool VideoPlayerPluginPlayerReady(int iID);
    [DllImport("__Internal")]
    private static extern float VideoPlayerPluginDurationSeconds(int iID);
    [DllImport("__Internal")]
    private static extern void VideoPlayerPluginExtents(int iID,ref int widthref int height);
    [DllImport("__Internal")]
    private static extern IntPtr VideoPlayerPluginCurFrameTexture(int iID);
    [DllImport("__Internal")]
    private static extern void VideoPlayerPluginLoadVideo(int iID,string videoURL);
    [DllImport("__Internal")]
    private static extern void VideoPlayerPluginPlayVideo(int iID);
    [DllImport("__Internal")]
    private static extern void VideoPlayerPluginPauseVideo(int iID);
    [DllImport("__Internal")]
    private static extern void VideoPlayerPluginResumeVideo(int iID);
    [DllImport("__Internal")]
    private static extern void VideoPlayerPluginRewindVideo(int iID);
    [DllImport("__Internal")]
    private static extern void VideoPlayerPluginSeekToVideo(int iID,float time);
    [DllImport("__Internal")]
    private static extern float VideoPlayerPluginCurTimeSeconds(int iID);
    [DllImport("__Internal")]
    private static extern bool VideoPlayerPluginIsPlaying(int iID);
    [DllImport("__Internal")]
    private static extern void VideoPlayerPluginStopVideo(int iID);
    [DllImport("__Internal")]
    private static extern bool VideoPlayerPluginFinish(int iID);
    [DllImport("__Internal")]
    private static extern void VideoPlayerPluginSetTexture(int iID,int iTextureID);
    
    
    
    
    
    int m_iID = -1;
    /// <summary>
    /// ???????????????true???????    /// </summary>
    public bool ready
    {
        get
        {
            return VideoPlayerPluginPlayerReady(m_iID);
        }
    }
    
    /// <summary>
    /// 
    /// </summary>
    public float duration
    {
        get
        {
            return VideoPlayerPluginDurationSeconds(m_iID);
        }
    }
    
    
    public float currentTime
    {
        get
        {
            return VideoPlayerPluginCurTimeSeconds(m_iID);
        }
    }
    
    
    public bool isPlaying
    {
        get
        {
            return VideoPlayerPluginIsPlaying(m_iID);
        }
    }
    public Vector2 videoSize
    {
        get
        {
            int width = 0height = 0;
            VideoPlayerPluginExtents(m_iID,ref widthref height);
            return new Vector2(widthheight);
        }
    }
    
    private Texture2D _videoTexture;
    
    public Texture2D videoTexture
    {
        get
        {
            IntPtr nativeTex = ready ? VideoPlayerPluginCurFrameTexture(m_iID) : (IntPtr)0;
            
            
            if (nativeTex != (IntPtr)0)
            {
                if (_videoTexture == null)
                {
                    _videoTexture = Texture2D.CreateExternalTexture((int)videoSize.x, (int)videoSize.yTextureFormat.RGBA32,
                                                                    falsefalse, (IntPtr)nativeTex);
                    _videoTexture.filterMode = FilterMode.Bilinear;
                    _videoTexture.wrapMode = TextureWrapMode.Clamp;
                }
                
                _videoTexture.UpdateExternalTexture((IntPtr)nativeTex);
            }
            /* else
            {
                if(_videoTexture != null)
                {
                    Destroy(_videoTexture);
                }
                
                _videoTexture = null;
            }*/
            
            return _videoTexture;
        }
    }
    
    private void Call_Destroy()
    {
        
        VideoPlayerPluginDestroyInstance(m_iID);
        
        if(_videoTexture != null)
            Destroy(_videoTexture);
        
        _videoTexture = null;
        m_iID = -1;
    }
    
    private void Call_UnLoad()
    {
        
        VideoPlayerPluginStopVideo(m_iID);
    }
    
    private bool Call_Load(string strFileNameint iSeek)
    {
        
        if(_videoTexture != null)
        {
            Destroy(_videoTexture);
        }
        
        _videoTexture = null;
        
        if (VideoPlayerPluginCanOutputToTexture(strFileName))
        {
            VideoPlayerPluginLoadVideo(m_iID,strFileName);    
        }
        
        
        
        
        return true;
    }
    
    private void Call_UpdateVideoTexture()
    {
        
        if(m_VideoTextureDummy != null)
        {
            Destroy(m_VideoTextureDummy);
            m_VideoTextureDummy = null;
        }
        
        ifm_CurrentState == MEDIAPLAYER_STATE.PLAYING || m_CurrentState == MEDIAPLAYER_STATE.PAUSED)
        {

            ifvideoTexture == null)
                return;

            if(m_TargetMaterial)
                m_TargetMaterial.GetComponent<MeshRenderer>().material.mainTexture = videoTexture;
            
            m_VideoTexture = videoTexture;
        }
        
        /*if(m_TargetMaterial)
        {
            if(m_TargetMaterial.GetComponent<MeshRenderer>().material.mainTexture != m_VideoTexture)
            {
                m_TargetMaterial.GetComponent<MeshRenderer>().material.mainTexture = m_VideoTexture;
            }
            
        }

        IntPtr nativeTex = ready ? VideoPlayerPluginCurFrameTexture(m_iID) : (IntPtr)0;
        */
        
        
        
        
    }
    
    private void Call_SetVolume(float fVolume)
    {
        VideoPlayerPluginSetVolume(m_iIDfVolume);
    }
    
    private void Call_SetSeekPosition(int iSeek)
    {
        float fSeek = (float)iSeek / 1000.0f;
        VideoPlayerPluginSeekToVideo(m_iID,fSeek);
    }
    
    private int Call_GetSeekPosition()
    {
        
        float fSeek = VideoPlayerPluginCurTimeSeconds(m_iID);
        return (int)(fSeek * 1000.0f);
    }
    
    private void Call_Play(int iSeek)
    {
        float fSeek = (float)iSeek / 1000.0f;
        
        ifisPlaying == true )
        {
            VideoPlayerPluginSeekToVideo(m_iID,fSeek);
        }
        else
        {
            ifm_CurrentState != MEDIAPLAYER_STATE.READY)
                VideoPlayerPluginSeekToVideo(m_iID,fSeek);
            
            VideoPlayerPluginPlayVideo(m_iID);
        }
        
        
        ifm_CurrentState == MEDIAPLAYER_STATE.STOPPED)
            m_CurrentState = MEDIAPLAYER_STATE.PLAYING;
        
        
    }
    
    private void Call_Reset()
    {
        
    }
    
    private void Call_Stop()
    {
        VideoPlayerPluginStopVideo(m_iID);
    }
    
    private void Call_RePlay()
    {
        VideoPlayerPluginResumeVideo(m_iID);
        m_CurrentState = MEDIAPLAYER_STATE.PLAYING;
    }
    
    private void Call_Pause()
    {
        m_CurrentState = MEDIAPLAYER_STATE.PAUSED;
        VideoPlayerPluginPauseVideo(m_iID);
        
    }
    
    private int Call_GetVideoWidth()
    {
        return (int)videoSize.x;
    }
    
    private int Call_GetVideoHeight()
    {
        return (int)videoSize.y;
    }
    
    private void Call_SetUnityTexture(int iTextureID)
    {
        VideoPlayerPluginSetTexture(m_iID,iTextureID);
    }
    
    private void Call_SetWindowSize()
    {
        
    }
    
    private void Call_SetLooping(bool bLoop)
    {
        VideoPlayerPluginSetLoop(m_iIDbLoop);
    }
    
    
    public void Call_SetUnityActivity()
    {
        m_iID = VideoPlayerPluginCreateInstance();
    }
    
    private int Call_GetError()
    {
        return 0;
    }
    
    private int Call_GetErrorExtra()
    {
        return 0;
    }
    
    private int Call_GetDuration()
    {
        return (int)(duration * 1000);
    }
    
    private int Call_GetCurrentSeekPercent()
    {
        return -1;
    }
    
    private MEDIAPLAYER_STATE Call_GetStatus()
    {
        
        ifVideoPlayerPluginFinish(m_iID) )
        {
            return MEDIAPLAYER_STATE.END;
        }
        
        ifm_CurrentState == MEDIAPLAYER_STATE.PAUSED || m_CurrentState == MEDIAPLAYER_STATE.STOPPED)
        {
            return m_CurrentState;
        }
        else if(isPlaying)
        {
            return MEDIAPLAYER_STATE.PLAYING;
        }
        else if(ready)
        {
            return MEDIAPLAYER_STATE.READY;
        }
        
        
        return m_CurrentState;
    }
    #endif
    #else
    
    
    
    private void Call_Destroy()
    {
        
    }
    
    private void Call_UnLoad()
    {
        
    }
    
    private bool Call_Load(string strFileNameint iSeek)
    {
        
        
        return true;
    }
    
    private void Call_UpdateVideoTexture()
    {
        
    }
    
    private void Call_SetVolume(float fVolume)
    {
        
    }
    
    private void Call_SetSeekPosition(int iSeek)
    {
        
    }
    
    private int Call_GetSeekPosition()
    {
        return 0;
    }
    
    private void Call_Play(int iSeek)
    {
        
    }
    
    private void Call_Reset()
    {
        
    }
    
    private void Call_Stop()
    {
        
    }
    
    private void Call_RePlay()
    {
        
    }
    
    private void Call_Pause()
    {
        
    }
    
    private int Call_GetVideoWidth()
    {
        return 0;
    }
    
    private int Call_GetVideoHeight()
    {
        return 0;
    }
    
    private void Call_SetUnityTexture(int iTextureID)
    {
        
    }
    
    private void Call_SetWindowSize()
    {
        
    }
    
    private void Call_SetLooping(bool bLoop)
    {
        
    }
    
    private void Call_SetRockchip(bool bValue)
    {
        
    }
    
    public void Call_SetUnityActivity()
    {
        
    }
    
    private int Call_GetError()
    {
        return 0;
    }
    
    private int Call_GetErrorExtra()
    {
        return 0;
    }
    
    private int Call_GetDuration()
    {
        return -1;
    }
    
    private int Call_GetCurrentSeekPercent()
    {
        return -1;
    }
    
    private void Call_SetSplitOBB(bool bValuestring strOBBName)
    {
    }
    
    private MEDIAPLAYER_STATE Call_GetStatus()
    {
        return (MEDIAPLAYER_STATE)0;
    }
    
    #endif // !UNITY_EDITOR
    
    
    
    IEnumerator DownloadStreamingVideoAndLoad(string strURL)
    {
        strURL = strURL.Trim();
        
        Debug.Log ("DownloadStreamingVideo : " + strURL);
        
        
        WWW www = new WWW(strURL);
        
        yield return www;
        
        if(string.IsNullOrEmpty(www.error))
        {
            
            ifSystem.IO.Directory.ExistsApplication.persistentDataPath + "/Data") == false)
                System.IO.Directory.CreateDirectoryApplication.persistentDataPath + "/Data");
            
            string write_path = Application.persistentDataPath + "/Data" + strURL.Substring(strURL.LastIndexOf("/"));
            
            /*    if(System.IO.File.Exists(write_path) == true)
            {
                Debug.Log("Delete : " + write_path);
                System.IO.File.Delete(write_path);
            }
        */
            System.IO.File.WriteAllBytes(write_pathwww.bytes);
            
            Call_Load("file://"+write_path,0);
        }
        else
        {
            Debug.Log(www.error);
            
        }
        
        www.Dispose();
        www = null;
        Resources.UnloadUnusedAssets();
    }
    
    IEnumerator CopyStreamingAssetVideoAndLoad(string strURL)
    {
        strURL = strURL.Trim();
        
        string write_path = Application.persistentDataPath + "/" + strURL;
        
        if(System.IO.File.Exists(write_path) == false)
        {
            Debug.Log ("CopyStreamingAssetVideoAndLoad : " + strURL);
            
            WWW www = new WWWApplication.streamingAssetsPath +"/"strURL);
            
            yield return www;
            
            ifstring.IsNullOrEmpty(www.error))
            {
                
                
                
                Debug.Log (write_path);
                System.IO.File.WriteAllBytes(write_pathwww.bytes );
                
                Call_Load("file://"+write_path,0);
                
                
            }
            else
            {
                Debug.Log(www.error);
                
            }
            
            www.Dispose();
            www = null;
        }
        else
        {
            Call_Load("file://"+write_path,0);
        }
        
    }
}

 

Playing Video from url metadata

August 29, 2016 - 5:44am #2

Need Help @AleesandroB

Log in or register to post comments