Unverified Commit 52334f03 authored by Hampton Maxwell's avatar Hampton Maxwell Committed by GitHub
Browse files

Merge pull request #1328 from linguokun1/master

solve the memory leak on Android and avoid the crash on kitkat
parents d5ee6b5a b485e64c
Loading
Loading
Loading
Loading
+25 −5
Changes for android/src/main/java/com/brentvatne/react/ReactVideoView.java: 25 added lines, 5 removed lines.
Original line number Diff line number Diff line
@@ -235,12 +235,19 @@ public class ReactVideoView extends ScalableVideoView implements
            mediaController.hide();
        }
        if ( mMediaPlayer != null ) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                mMediaPlayer.setOnTimedMetaDataAvailableListener(null);
            }
            mMediaPlayerValid = false;
            release();
        }
        if (mIsFullscreen) {
            setFullscreen(false);
        }
        if (mThemedReactContext != null) {
            mThemedReactContext.removeLifecycleEventListener(this);
            mThemedReactContext = null;
        }
    }

    public void setSrc(final String uriString, final String type, final boolean isNetwork, final boolean isAsset, final ReadableMap requestHeaders) {
@@ -567,8 +574,7 @@ public class ReactVideoView extends ScalableVideoView implements
            });
        }

        // Select track (so we can use it to listen to timed meta data updates)
        mp.selectTrack(0);
        selectTimedMetadataTrack(mp);
    }

    @Override
@@ -603,9 +609,7 @@ public class ReactVideoView extends ScalableVideoView implements

    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent) {
        // Select track (so we can use it to listen to timed meta data updates)
        mp.selectTrack(0);

        selectTimedMetadataTrack(mp);
        mVideoBufferedDuration = (int) Math.round((double) (mVideoDuration * percent) / 100.0);
    }

@@ -761,4 +765,20 @@ public class ReactVideoView extends ScalableVideoView implements

        return result;
    }
        
    // Select track (so we can use it to listen to timed meta data updates)
    private void selectTimedMetadataTrack(MediaPlayer mp) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            return;
        }
        try { // It's possible this could throw an exception if the framework doesn't support getting track info
            MediaPlayer.TrackInfo[] trackInfo = mp.getTrackInfo();
            for (int i = 0; i < trackInfo.length; ++i) {
                if (trackInfo[i].getTrackType() == MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT) {
                    mp.selectTrack(i);
                    break;
                }
            }
        } catch (Exception e) {}
    }
}