簡體   English   中英

lib vlc android無法播放原始h264嗎?

[英]lib vlc android won't play raw h264?

我需要開發一個使用vlc媒體播放器選擇rtsp流並播放原始h264的android應用。 我使用Mac OSx OSx按照AndroidCompile中的說明編譯了lib vlc android。 該項目編譯時帶有一些警告(如下所示),我能夠在Android平板電腦上運行vlc應用。 vlc應用程序可以很好地播放h264容器的rtsp流,但不能播放實時cam的原始h264。 下面的logcat顯示了一些unable to decode stream: java.lang.NullPointerException但是我在播放任何流的開始就已經看到了這些,我想是vlc試圖找出要使用的解碼器。 如日志貓所示,它確定h264。 播放服務宣布開始播放后不久,它宣布播放服務結束。

在Google Play商店中找到的vlc android應用能夠正常播放同一提要,因此提要沒有任何問題,並且發行版具有編解碼器和功能,可播放原始h264。 C/C++庫的編譯方式可能有問題嗎? 還是libvlc(已編譯)默認情況下不播放原始h264? 我尚未修改AndroidCompile項目中的任何源代碼。 是否有人編譯過libvlc並能夠播放原始h264的rtsp流? 或者我應該考慮將流傳送到容器中並從容器中播放,我該怎么做?

我的機器上運行的Mac OS X,運行compile.sh腳本我安裝了構建工具建議之前,該項目從運行Android Studio 在logcat下方,以及項目編譯時的警告摘要。

>07-15 14:38:26.139    9037-9037/? D/PlaybackService.Client﹕ Service Connected
>07-15 14:38:26.139    9037-9037/? V/VLC/PlaybackService﹕ Creating on-the-fly Media object for rtsp://root:****@10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720
>07-15 14:38:26.139    9037-9037/? V/VLC/PlaybackService﹕ Loading position 0 in [org.videolan.vlc.MediaWrapper@42001178]
>07-15 14:38:26.149      439-744/? I/MediaFocusControl﹕ AudioFocus  requestAudioFocus() from android.media.AudioManager@41f316d0org.videolan.vlc.PlaybackService$1@41e62750
>07-15 14:38:26.149      439-727/? I/MediaFocusControl﹕ Remote Control   registerMediaButtonIntent() for PendingIntent{4220baf0: PendingIntentRecord{41fd9ab0 org.videolan.vlc.debug broadcastIntent}}
>07-15 14:38:26.149    9037-9037/? D/VLC﹕ [72210838] core generic: creating audio output
>07-15 14:38:26.149    9037-9037/? D/VLC﹕ [73a56e28] core audio output: looking for audio output module matching "android_audiotrack,none": 4 candidates
>07-15 14:38:26.149    9037-9037/? D/VLC﹕ [73a56e28] core audio output: using audio output module "android_audiotrack"
>07-15 14:38:26.149    9037-9037/? D/VLC﹕ [72210838] core generic: keeping audio output
>07-15 14:38:26.149    9037-9037/? D/VLC﹕ [73acc248] core input: Creating an input for 'rtsp://10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720'
>07-15 14:38:26.149    9037-9412/? D/VLC﹕ [73acc248] core input: using timeshift granularity of 50 MiB, in path '/tmp'
>07-15 14:38:26.159    9037-9412/? D/VLC﹕ [73acc248] core input: `rtsp://root:****@10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720' gives access `rtsp' demux `' path `root:****@10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720'
>07-15 14:38:26.159    9037-9412/? D/VLC﹕ [73acc248] core input: specified demux `any'
>07-15 14:38:26.159    9037-9412/? D/VLC﹕ [73acc248] core input: creating demux: access='rtsp' demux='any' location='root:****@10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720' file='(null)'
>07-15 14:38:26.159    9037-9412/? D/VLC﹕ [73890268] core demux: looking for access_demux module matching "rtsp": 6 candidates
>07-15 14:38:26.159    9037-9412/? D/VLC﹕ [73890268] live555 demux: version 2015.06.24
>07-15 14:38:26.159    9037-9052/? E/VLC-std﹕ Opening connection to
>07-15 14:38:26.159    9037-9052/? E/VLC-std﹕ 10.168.1.45
>07-15 14:38:26.159    9037-9052/? E/VLC-std﹕ , port
>07-15 14:38:26.159    9037-9052/? E/VLC-std﹕ 554
>07-15 14:38:26.159    9037-9052/? E/VLC-std﹕ ...
>07-15 14:38:26.159    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.179    9037-9052/? E/VLC-std﹕ ...remote connection opened
>    Sending request: OPTIONS rtsp://10.168.1.45:554/axis-media/media.amp?videocodec=h264&resolution=1280x720 RTSP/1.0
>    CSeq: 2
>    User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
>07-15 14:38:26.179    9037-9052/? E/VLC-std﹕ Received 143
>07-15 14:38:26.179    9037-9052/? E/VLC-std﹕ new bytes of response data.
>    Received a complete OPTIONS response:
>    RTSP/1.0 200 OK
>    CSeq: 2
>    Public: DESCRIBE, GET_PARAMETER, PAUSE, PLAY, SETUP, SET_PARAMETER, >TEARDOWN
>    Date: Wed, 15 Jul 2015 20:32:31 GMT
>    Sending request:
>07-15 14:38:26.179    9037-9052/? E/VLC-std﹕ DESCRIBE rtsp://10.168.1.45:554/axis-media/media.amp?>videocodec=h264&resolution=1280x720 RTSP/1.0
>    CSeq: 3
>    User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
>    Accept: application/sdp
>07-15 14:38:26.189    9037-9037/? E/BitmapFactory﹕ Unable to decode >stream: java.lang.NullPointerException
>07-15 14:38:26.189    9037-9052/? E/VLC-std﹕ Received 247 new bytes of >response data.
>    Received a complete DESCRIBE response:
>    RTSP/1.0 401 Unauthorized
>    CSeq: 3
>    WWW-Authenticate: Digest realm="AXIS_00408CE6D77E", nonce="00478005Y607330b149b17a0889d51cdbe1476bcbc90d0", stale=FALSE
>    WWW-Authenticate: Basic realm="AXIS_00408CE6D77E"
>    Date: Wed, 15 Jul 2015 20:32:31 GMT
>    Resending...
>    Sending request: DESCRIBE rtsp://10.168.1.45:554/axis-media/media.amp?videocodec=h264&resolution=1280x720 RTSP/1.0
>    CSeq: 4
>    Authorization: Digest username="root", realm="AXIS_00408CE6D77E", nonce="00478005Y607330b149b17a0889d51cdbe1476bcbc90d0", uri="rtsp://10.168.1.45:554/axis-media/media.amp?videocodec=h264&resolution=1280x720", >response="23cc09ed9e29fc64404cddae9c8b44cc"
>    User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
>    Accept: application/sdp
>07-15 14:38:26.199    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.199    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.209    9037-9412/? D/VLC﹕ [73890268] live555 demux: RTP >subsession 'video/H264'
>07-15 14:38:26.209    9037-9052/? E/VLC-std﹕ Received 809 new bytes of >response data.
>    Received a complete DESCRIBE response:
>    RTSP/1.0 200 OK
>    CSeq: 4
>    Content-Type: application/sdp
>    Content-Base: rtsp://10.168.1.45:554/axis-media/media.amp/
>    Date: Wed, 15 Jul 2015 20:32:31 GMT
>    Content-Length: 632
>    v=0
>    o=- 1436992351621972 1436992351621972 IN IP4 10.168.1.45
>    s=Media Presentation
>    e=NONE
>    b=AS:50000
>    t=0 0
>    a=control:rtsp://10.168.1.45:554/axis-media/media.amp?videocodec=h264&resolution=1280x720
>    a=range:npt=0.000000-
>    m=video 0 RTP/AVP 96
>    c=IN IP4 0.0.0.0
>    b=AS:50000
>    a=framerate:25.0
>    >a=transform:1.000000,0.000000,0.000000;0.000000,0.900000,0.000000;0.000000,0.000000,1.000000
>    a=control:rtsp://10.168.1.45:554/axis-media/media.amp/trackID=1?videocodec=h264&resolution=1280x720
>    a=rtpmap:96 H264/90000
>    a=fmtp:96 packetization-mode=1; profile-level-id=420029; sprop->parameter-sets=Z0IAKeKQCgC3YC3AQEBpB4kRUA==,aM48gA==
    Sending request:
>07-15 14:38:26.209    9037-9052/? E/VLC-std﹕ SETUP rtsp://10.168.1.45:554/axis-media/media.amp/trackID=1?videocodec=h264&resolution=1280x720 RTSP/1.0
>    CSeq: 5
>    Authorization: Digest username="root", realm="AXIS_00408CE6D77E", nonce="00478005Y607330b149b17a0889d51cdbe1476bcbc90d0", uri="rtsp://10.168.1.45:554/axis-media/media.amp/", response="8c5fc662991d144c3d2d319abdb09802"
>    User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
>    Transport: RTP/AVP;unicast;client_port=53078-53079
>07-15 14:38:26.219      576-588/? D/dalvikvm﹕ GC_FOR_ALLOC freed 2420K, 79% free 8246K/38240K, paused 30ms, total 31ms
>07-15 14:38:26.229    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.239    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.259    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.259    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.269      439-722/? W/InputMethodManagerService﹕ Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@41c773b8 attribute=null, token = android.os.BinderProxy@4225d8a0
>07-15 14:38:26.289    9037-9052/? E/VLC-std﹕ Received 198 new bytes of response data.
>07-15 14:38:26.289    9037-9052/? E/VLC-std﹕ Received a complete SETUP >response:
>    RTSP/1.0 200 OK
>    CSeq: 5
>    Session: 1EB7CD91; timeout=60
>    Transport: RTP/AVP;unicast;client_port=53078->53079;server_port=50124-50125;ssrc=57E15CB7;mode="PLAY"
>    Date: Wed, 15 Jul 2015 20:32:31 GMT
>07-15 14:38:26.289    9037-9412/? D/VLC﹕ [73acc248] core input: selecting program id=0
>07-15 14:38:26.289    9037-9412/? D/VLC﹕ [73890268] live555 demux: setup start: 0.000000 stop:0.000000
>07-15 14:38:26.289    9037-9052/? E/VLC-std﹕ Sending request: PLAY rtsp://10.168.1.45:554/axis-media/media.amp?videocodec=h264&resolution=1280x720 RTSP/1.0
>    CSeq: 6
>    Authorization: Digest username="root", realm="AXIS_00408CE6D77E", nonce="00478005Y607330b149b17a0889d51cdbe1476bcbc90d0", uri="rtsp://10.168.1.45:554/axis-media/media.amp/", response="20a147ef13ac0dd25e485b077f24d072"
>    User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
>    Session: 1EB7CD91
>    Range: npt=0.000-
>07-15 14:38:26.299    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.339    9037-9037/? D/dalvikvm﹕ GC_FOR_ALLOC freed 732K, 15% free 6659K/7816K, paused 24ms, total 25ms
>07-15 14:38:26.359      439-729/? I/ActivityManager﹕ START u0 {act=org.videolan.vlc.gui.video.PLAY_FROM_VIDEOGRID flg=0x18000000 cmp=org.videolan.vlc.debug/org.videolan.vlc.gui.video.VideoPlayerActivity (has extras)} from pid 9037
>07-15 14:38:26.409    9037-9052/? E/VLC-std﹕ Received 233 new bytes of response data.
>07-15 14:38:26.409    9037-9052/? E/VLC-std﹕ Received a complete PLAY response:
>    RTSP/1.0 200 OK
>    CSeq: 6
>    Session: 1EB7CD91
>    Range: npt=0-
>    RTP-Info: url=rtsp://10.168.1.45:554/axis-media/media.amp/trackID=1?videocodec=h264&resolution=1280x720;seq=31479;rtptime=1375710016
    Date: Wed, 15 Jul 2015 20:32:31 GMT
>07-15 14:38:26.409    9037-9412/? D/VLC﹕ [73890268] live555 demux: We have a timeout of 60 seconds
>07-15 14:38:26.409    9037-9412/? D/VLC﹕ [73890268] live555 demux: spawned timeout thread
>07-15 14:38:26.409    9037-9412/? D/VLC﹕ [73890268] live555 demux: play start: 0.000000 stop:0.000000
>07-15 14:38:26.409    9037-9412/? D/VLC﹕ [73890268] core demux: using access_demux module "live555"
>07-15 14:38:26.409    9037-9412/? D/VLC﹕ [73acc248] core input: video is disabled, not selecting ES 0x0
>07-15 14:38:26.409    9037-9412/? D/VLC﹕ [73c1aea0] core demux meta: looking for meta reader module matching "any": 1 candidates
>07-15 14:38:26.409    9037-9412/? D/VLC﹕ [73c1aea0] core demux meta: no meta reader modules matched
>07-15 14:38:26.409    9037-9412/? D/VLC﹕ [73acc248] core input: `rtsp://root:****@10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720' successfully opened
>07-15 14:38:26.409    9037-9052/? E/VLC-std﹕ Sending request: TEARDOWN rtsp://10.168.1.45:554/axis-media/media.amp/trackID=1?videocodec=h264&resolution=1280x720 RTSP/1.0
>    CSeq: 7
>    Authorization: Digest username="root", realm="AXIS_00408CE6D77E", nonce="00478005Y607330b149b17a0889d51cdbe1476bcbc90d0", uri="rtsp://10.168.1.45:554/axis-media/media.amp/", response="c03b9bbe9546d7c65fdc193c8cee8c8f"
>    User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
>    Session: 1EB7CD91
>07-15 14:38:26.439    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.439      116-336/? W/AudioFlinger﹕ write blocked for 374 msecs, 150 delayed writes, thread 0x40c51008
>07-15 14:38:26.469    9037-9037/? I/VLC/PlaybackService﹕ Media.Event.ParsedChanged
>07-15 14:38:26.469    9037-9037/? D/VLC/MediaWrapper﹕ Title rtsp://10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720
>07-15 14:38:26.469    9037-9037/? D/VLC/MediaWrapper﹕ Artist null
>07-15 14:38:26.469    9037-9037/? D/VLC/MediaWrapper﹕ Genre null
>07-15 14:38:26.469    9037-9037/? D/VLC/MediaWrapper﹕ Album null
>07-15 14:38:26.479    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.489    9037-9412/? D/VLC﹕ [73890268] live555 demux: tk-rtpSource->hasBeenSynchronizedUsingRTCP()
>07-15 14:38:26.489    9037-9412/? E/VLC﹕ [73acc248] core input: ES_OUT_RESET_PCR called
>07-15 14:38:26.489    9037-9052/? E/VLC-std﹕ Sending request:
>07-15 14:38:26.489    9037-9052/? E/VLC-std﹕ GET_PARAMETER rtsp://10.168.1.45:554/axis-media/media.amp?videocodec=h264&resolution=1280x720 RTSP/1.0
>    CSeq: 8
>    Authorization: Digest username="root", realm="AXIS_00408CE6D77E", nonce="00478005Y607330b149b17a0889d51cdbe1476bcbc90d0", uri="rtsp://10.168.1.45:554/axis-media/media.amp/", response="eef50526f953157a541671aac10b7d99"
>    User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
>    Session: 1EB7CD91
>07-15 14:38:26.489    9037-9052/? E/VLC-std﹕ [ 07-15 14:38:26.489  9037: 9412 D/VLC      ]
    [73890268] live555 demux: RTSP track Close, 0 track remaining
>07-15 14:38:26.489    9037-9412/? D/VLC﹕ [73acc248] core input: EOF reached
>07-15 14:38:26.489    9037-9412/? D/VLC﹕ [73890268] core demux: removing module "live555"
>07-15 14:38:26.499    9037-9052/? E/VLC-std﹕ Sending request:
>07-15 14:38:26.499    9037-9052/? E/VLC-std﹕ TEARDOWN rtsp://10.168.1.45:554/axis-media/media.amp?videocodec=h264&resolution=1280x720 RTSP/1.0
>    CSeq: 9
>    Authorization: Digest username="root", realm="AXIS_00408CE6D77E", nonce="00478005Y607330b149b17a0889d51cdbe1476bcbc90d0", uri="rtsp://10.168.1.45:554/axis-media/media.amp/", response="c03b9bbe9546d7c65fdc193c8cee8c8f"
>    User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
>    Session: 1EB7CD91
>07-15 14:38:26.499    9037-9052/? E/VLC-std﹕ [ 07-15 14:38:26.499  9037: 9412 D/VLC      ]
    [73acc248] core input: Program doesn't contain anymore ES
>07-15 14:38:26.499    9037-9412/? D/dalvikvm﹕ threadid=15: thread exiting, not yet detached (count=0)
>07-15 14:38:26.499    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.519    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.529    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.709      439-729/? D/dalvikvm﹕ GC_FOR_ALLOC freed 1741K, 32% free 10561K/15308K, paused 142ms, total 142ms
>07-15 14:38:26.729    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.749    9037-9037/? I/VLC/PlaybackService﹕ MediaPlayer.Event.Playing
>07-15 14:38:26.759    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.769    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.789    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.799    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.829    9037-9037/? D/VLC/VideoPlayerActivity﹕ MediaRouter information : android.media.MediaRouter@41e6f950
>07-15 14:38:26.829    9037-9037/? I/VLC/VideoPlayerActivity﹕ No secondary display detected
>07-15 14:38:26.959    9037-9037/? D/dalvikvm﹕ GC_FOR_ALLOC freed 1372K, 22% free 6328K/8044K, paused 24ms, total 26ms
>07-15 14:38:27.029    9037-9037/? I/Choreographer﹕ Skipped 30 frames!  The application may be doing too much work on its main thread.
>07-15 14:38:27.309    9037-9037/? I/VLC/PlaybackService﹕ MediaPlayerEndReached
>07-15 14:38:27.339    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:27.349    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:27.359    9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:27.359    9037-9037/? W/VLC/PlaybackService﹕ Warning: invalid next index, aborted !
>07-15 14:38:27.359    9037-9037/? D/VLC﹕ [73acc248] core input: Destroying the input for 'rtsp://10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720'
>07-15 14:38:27.359    9037-9037/? D/VLC﹕ [73a56e28] core audio output: removing module "android_audiotrack"
>07-15 14:38:27.379      439-744/? I/MediaFocusControl﹕ AudioFocus  abandonAudioFocus() from android.media.AudioManager@41f316d0org.videolan.vlc.PlaybackService$1@41e62750
>07-15 14:38:27.379     439-1293/? I/MediaFocusControl﹕ Remote Control   unregisterMediaButtonIntent() for PendingIntent{42033a48: PendingIntentRecord{41fd9ab0 org.videolan.vlc.debug broadcastIntent}}
>07-15 14:38:27.399    9037-9037/? D/PlaybackService.Client﹕ Service Connected
>07-15 14:38:27.479    9037-9037/? E/VLC/VideoPlayerActivity﹕ Invalid surface size
>07-15 14:38:27.489    9037-9037/? D/VLC/VideoPlayerActivity﹕ Continuing playback from AudioService at index 0
>07-15 14:38:27.489      439-453/? I/ActivityManager﹕ Displayed org.videolan.vlc.debug/org.videolan.vlc.gui.video.VideoPlayerActivity: +1s48ms
>07-15 14:38:27.499    9037-9037/? I/AppCompatDelegate﹕ The Activity's LayoutInflater already has a Factory installed so we can not install AppCompat's
>07-15 14:38:30.069      116-336/? D/AudioHardware﹕ AudioHardware pcm playback is going to standby.
> ## Quoted Heading ##


Android NDK: WARNING:jni/Android.mk:iomx.13: non-system libraries in linker flags: -lgcc -lstagefright -lmedia -lbinder    
Android NDK:     This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES    
Android NDK:     or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the    
Android NDK:     current module    
Android NDK: WARNING:jni/Android.mk:iomx.14: non-system libraries in linker flags: -lgcc -lstagefright -lmedia -lbinder    
Android NDK:     This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES    
Android NDK:     or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the    
Android NDK:     current module    
Android NDK: WARNING:jni/Android.mk:vlcjni: non-system libraries in linker flags: /Users/breinosa/Library/Android/android/.modules/build-android-arm-linux-androideabi/liba52_plugin.a 

我在很多地方都注意到了這一點:

    Unable to decode stream: java.lang.NullPointerException

您需要找出導致NPE的原因。

在沒有看到您的代碼的情況下,我最初的猜測是它將一個null傳遞給位圖工廠,然后說“將其解碼”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM