예제 #1
0
 public override void Pause()
 {
     NativePause();
     isPausedBeforeSeek = true;
     statusPlayer       = NexPlayerStatus.NEXPLAYER_STATUS_PAUSED;
     GetStatusPlayer();
 }
예제 #2
0
 public override void Resume()
 {
     NativeStartPlayBack();
     isPausedBeforeSeek = false;
     statusPlayer       = NexPlayerStatus.NEXPLAYER_STATUS_PLAYING;
     GetStatusPlayer();
 }
예제 #3
0
    public override void ClosePlayback()
    {
        statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_CLOSED;
        WebGLNexPlayerNativeShutdown(m_Instance);
        Log("NEXPLAYER_EVENT_CLOSED will be called");

        OnEvent(NexPlayerEvent.NEXPLAYER_EVENT_CLOSED, 0, 0);
    }
예제 #4
0
    public override void Pause()
    {
        pausedBeforeSeeking = true;

        // Other wise it won't be updated until the next Update()
        statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_PAUSED;
        WebGLNexPlayerPause(m_Instance);
    }
예제 #5
0
    public override void Init(string URI, bool autoPlay, bool useExtendedLogs)
    {
        this.URI             = URI;
        this.useExtendedLogs = useExtendedLogs;
        statusPlayer         = NexPlayerStatus.NEXPLAYER_STATUS_CLOSED;

        m_Instance = WebGLNexPlayerCreate(this.URI, autoPlay, useExtendedLogs);

        textureToUpdate          = new Texture2D(0, 0, TextureFormat.ARGB32, false);
        textureToUpdate.wrapMode = TextureWrapMode.Repeat;
    }
예제 #6
0
    public void TooglePlayPause()
    {
        Debug.Log("Click TooglePlayPause");
        NexPlayerStatus statusPlayer = player.GetStatusPlayer();

        if (statusPlayer == NexPlayerStatus.NEXPLAYER_STATUS_PLAYING)
        {
            OnApplicationPause(true);
        }
        else if (statusPlayer == NexPlayerStatus.NEXPLAYER_STATUS_PAUSED || statusPlayer == NexPlayerStatus.NEXPLAYER_STATUS_OPENED)
        {
            OnApplicationPause(false);
        }
    }
예제 #7
0
    public override void Init(string URI, bool autoPlay, bool useExtendedLogs)
    {
        this.URI             = URI;
        this.autoPlay        = autoPlay;
        this.useExtendedLogs = useExtendedLogs;
        statusPlayer         = NexPlayerStatus.NEXPLAYER_STATUS_CLOSED;

        if (NativeCheckValidity())
        {
            NativeInit();
        }
        else
        {
            throw new System.Exception("Invalid Time Lock!");
        }
    }
예제 #8
0
    void EventNotify(NexPlayerEvent paramEvent, int param1, int param2)
    {
        if (paramEvent != NexPlayerEvent.NEXPLAYER_EVENT_ON_TIME)
        {
            Debug.Log("EventNotify: " + paramEvent + ", param1: " + param1 + ", param2: " + param2);
        }

        switch (paramEvent)
        {
        case NexPlayerEvent.NEXPLAYER_EVENT_TEXTURE_CHANGED:
            // It's important to change the texture of every Unity object that should display the video frame when this callback is called
            if (GetComponent <Renderer>())
            {
                GetComponent <Renderer>().material.mainTexture = player.GetTexture();
            }
            else
            {
                GetComponent <RawImage>().texture = player.GetTexture();
            }

            if (rendererToUpdate != null)
            {
                foreach (Renderer renderer in rendererToUpdate)
                {
                    renderer.material.mainTexture = player.GetTexture();
                }
            }
            break;

        case NexPlayerEvent.NEXPLAYER_EVENT_ON_TIME:
            SetCurrentTime(); break;

        case NexPlayerEvent.NEXPLAYER_EVENT_TRACK_CHANGED:
            SetVideoSize(); break;

        case NexPlayerEvent.NEXPLAYER_EVENT_INIT_COMPLEATE:
        {
            status.text           = "Opened";
            playPauseImage.sprite = playSprite;
        }
        break;

        case NexPlayerEvent.NEXPLAYER_EVENT_PLAYBACK_STARTED:
        {
            SetTotalTime();
            status.text           = "Playing";
            playPauseImage.sprite = pauseSprite;
        }
        break;

        case NexPlayerEvent.NEXPLAYER_EVENT_PLAYBACK_PAUSED:
        {
            status.text           = "Pause";
            playPauseImage.sprite = playSprite;
        }
        break;

        case NexPlayerEvent.NEXPLAYER_EVENT_END_OF_CONTENT:
        {
            status.text           = "Pause";
            playPauseImage.sprite = playSprite;
            ToogleQuit();
        }
        break;

        case NexPlayerEvent.NEXPLAYER_EVENT_BUFFERING_STARTED:
            status.text = "Buffering..."; break;

        case NexPlayerEvent.NEXPLAYER_EVENT_BUFFERING_ENDED:
        {
            NexPlayerStatus statusPlayer = player.GetStatusPlayer();
            if (statusPlayer == NexPlayerStatus.NEXPLAYER_STATUS_PLAYING)
            {
                status.text = "Playing";
            }
            else if (statusPlayer == NexPlayerStatus.NEXPLAYER_STATUS_PAUSED)
            {
                status.text = "Pause";
            }
        }
        break;

        case NexPlayerEvent.NEXPLAYER_EVENT_ERROR:
        {
            status.text = "Error";
            player      = null;
            switch (param1)
            {
            case (int)NexPlayerError.NEXPLAYER_ERROR_GENERAL: Debug.LogError("NEXPLAYER_ERROR_GENERAL"); break;

            case (int)NexPlayerError.NEXPLAYER_ERROR_SRC_NOT_FOUND: Debug.LogError("NEXPLAYER_ERROR_SRC_NOT_FOUND"); break;
            }
        }
        break;

        case NexPlayerEvent.NEXPLAYER_EVENT_CLOSED:
        {
            player = null;

            GoBack();
        }
        break;
        }
    }
예제 #9
0
    private void CallBackInMainThread(int paramEvent, int param1, int param2)
    {
        lock (this) //This can be null the second time it's called. Why? ... I don't know
        {
            Log("CallBack paramEvent: " + paramEvent + ", param1: " + param1 + ", param2: " + param2);

            switch (paramEvent)
            {
            case NEXPLAYER_TEXTURE_CHANGED:
            {
                if (param1 == 0)
                {         // First texture created. Subsequent calls will have this set to 0
                    NativeOpenURI(URI);
                    statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_OPENED;

                    CallOnEvent(NexPlayerEvent.NEXPLAYER_EVENT_INIT_COMPLEATE, 0, 0);

                    if (autoPlay)
                    {
                        NativeStartPlayBack();
                    }
                }
                else
                {
                    widthTexture  = param1;
                    heightTexture = param2;

                    Log("Texture2D heightTexture: " + heightTexture + ", widthTexture: " + widthTexture);

                    textureToUpdate = new Texture2D(widthTexture, heightTexture, TextureFormat.BGRA32, false);         //TextureFormat.RGBA32 TextureFormat.BGRA32

                    Log("new Texture2D done");

                    textureToUpdate.filterMode = FilterMode.Bilinear;
                    textureToUpdate.anisoLevel = 1;
                    textureToUpdate.wrapMode   = TextureWrapMode.Repeat;

                    Log("Texture in Unity created");

                    NativeSetTextureFromUnity(textureToUpdate.GetNativeTexturePtr(), textureToUpdate.width, textureToUpdate.height);

                    Log("NativeSetTextureFromUnity already called");

                    CallOnEvent(NexPlayerEvent.NEXPLAYER_EVENT_TEXTURE_CHANGED, widthTexture, heightTexture);

                    Log("CallOnEvent(NexPlayerEvent.NEXPLAYER_EVENT_TEXTURE_CHANGED done");
                }
            }
            break;

            case NEXPLAYER_EVENT_ENDED:
            {
                statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_PAUSED;
                CallOnEvent(NexPlayerEvent.NEXPLAYER_EVENT_END_OF_CONTENT, param1, param2);
            }
            break;

            case NEXPLAYER_EVENT_PLAYING:
            {
                statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_PLAYING;
                CallOnEvent(NexPlayerEvent.NEXPLAYER_EVENT_PLAYBACK_STARTED, param1, param2);
            }
            break;

            case NEXPLAYER_EVENT_PAUSE:
            {
                statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_PAUSED;
                CallOnEvent(NexPlayerEvent.NEXPLAYER_EVENT_PLAYBACK_PAUSED, param1, param2);
            }
            break;

            case NEXPLAYER_EVENT_TIMEUPDATE:
            {
                CallOnEvent(NexPlayerEvent.NEXPLAYER_EVENT_ON_TIME, param1, param2);
            }
            break;

            case NEXPLAYER_EVENT_BUFFERINGSTARTED:
            {
                statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_BUFFERING;
                CallOnEvent(NexPlayerEvent.NEXPLAYER_EVENT_BUFFERING_STARTED, param1, param2);
            }
            break;

            case NEXPLAYER_EVENT_BUFFERINGENDED:
            {
                if (!isPausedBeforeSeek)
                {
                    statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_PLAYING;
                }
                else
                {
                    statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_PAUSED;
                }
                CallOnEvent(NexPlayerEvent.NEXPLAYER_EVENT_BUFFERING_ENDED, param1, param2);
            }
            break;

            case NEXPLAYER_EVENT_FORMATCHANGE: CallOnEvent(NexPlayerEvent.NEXPLAYER_EVENT_TRACK_CHANGED, param1, param2); break;

            // Otherwise it won't be called in some .mp4 online videos
            case NEXPLAYER_EVENT_FIRSTFRAMEREADY: CallOnEvent(NexPlayerEvent.NEXPLAYER_EVENT_TRACK_CHANGED, param1, param2); break;

            case NEXPLAYER_EVENT_ERROR:
            {
                Log("NEXPLAYER_EVENT_ERROR internal error. param1: " + param1 + ", param2: " + param2);
                statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_CLOSED;

                int errorCode = (int)NexPlayerError.NEXPLAYER_ERROR_GENERAL;
                if (param1 == 4)
                {
                    errorCode = (int)NexPlayerError.NEXPLAYER_ERROR_SRC_NOT_FOUND;
                }

                CallOnEvent(NexPlayerEvent.NEXPLAYER_EVENT_ERROR, errorCode, param2);
                NativeShutdown();
            }
            break;

            default: break;
            }
        }
    }
예제 #10
0
 public override void Stop()
 {
     NativeShutdown();
     statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_CLOSED;
     GetStatusPlayer();
 }
예제 #11
0
 public override void StartPlayBack()
 {
     NativeStartPlayBack();
     statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_PLAYING;
     GetStatusPlayer();
 }
예제 #12
0
    private void ProcessCallBack(int paramEvent, int param1, int param2)
    {
        Log("paramEvent: " + paramEvent + ", param1: " + param1 + ", param2: " + param2);

        switch (paramEvent)
        {
        // Only used for DASH
        case NEXPLAYER_EVENT_TRACK_CHANGED: ChangeSizeTexture(); break;

        case NEXPLAYER_EVENT_INIT_COMPLEATE:
        {
            if (statusPlayer == NexPlayerStatus.NEXPLAYER_STATUS_CLOSED)         // It's the first time it's closed
            {
                statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_OPENED;
                OnEvent(NexPlayerEvent.NEXPLAYER_EVENT_INIT_COMPLEATE, param1, param2);
            }
        }
        break;

        case NEXPLAYER_EVENT_END_OF_CONTENT: statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_PAUSED; OnEvent(NexPlayerEvent.NEXPLAYER_EVENT_END_OF_CONTENT, param1, param2); break;

        case NEXPLAYER_EVENT_ON_TIME: OnEvent(NexPlayerEvent.NEXPLAYER_EVENT_ON_TIME, param1, 0); break;

        case NEXPLAYER_EVENT_PLAYBACK_STARTED:
        {
            if (statusPlayer == NexPlayerStatus.NEXPLAYER_STATUS_CLOSED)
            {
                // This is being called before the init callback
                ProcessCallBack(NEXPLAYER_EVENT_INIT_COMPLEATE, 0, 0);
            }

            statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_PLAYING;
            OnEvent(NexPlayerEvent.NEXPLAYER_EVENT_PLAYBACK_STARTED, param1, param2);
        }
        break;

        case NEXPLAYER_EVENT_BUFFERING_STARTED: statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_BUFFERING; OnEvent(NexPlayerEvent.NEXPLAYER_EVENT_BUFFERING_STARTED, param1, param2); break;

        case NEXPLAYER_EVENT_BUFFERING_ENDED: {
            if (pausedBeforeSeeking)
            {
                statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_PAUSED;
            }
            else
            {
                statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_PLAYING;
            }

            OnEvent(NexPlayerEvent.NEXPLAYER_EVENT_BUFFERING_ENDED, param1, param2);
        } break;

        case NEXPLAYER_EVENT_TEXTURE_CHANGED: OnEvent(NexPlayerEvent.NEXPLAYER_EVENT_TEXTURE_CHANGED, param1, param2); break;

        case NEXPLAYER_EVENT_PLAYBACK_PAUSED: statusPlayer = NexPlayerStatus.NEXPLAYER_STATUS_PAUSED; OnEvent(NexPlayerEvent.NEXPLAYER_EVENT_PLAYBACK_PAUSED, param1, param2); break;

        case NEXPLAYER_EVENT_ERROR:
        {
            Log("NEXPLAYER_EVENT_ERROR internal error. param1: " + param1 + ", param2: " + param2);

            int errorCode = (int)NexPlayerError.NEXPLAYER_ERROR_GENERAL;
            if (param1 == 4)
            {
                errorCode = (int)NexPlayerError.NEXPLAYER_ERROR_SRC_NOT_FOUND;
            }

            OnEvent(NexPlayerEvent.NEXPLAYER_EVENT_ERROR, errorCode, param2);
        }
        break;

        default: break;
        }
    }