Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release v0.23.1 (please TEST!) #8548

Closed
3 tasks done
Stypox opened this issue Jun 24, 2022 · 12 comments
Closed
3 tasks done

Release v0.23.1 (please TEST!) #8548

Stypox opened this issue Jun 24, 2022 · 12 comments

Comments

@Stypox
Copy link
Member

Stypox commented Jun 24, 2022

Testing for regressions

Debug APK (built by our CI in #8547): NewPipe_v0.23.1_RC2_debug.zip
Release APK (signed with @Stypox' keys): NewPipe_v0.23.1_RC2_release.zip
Please report only regressions (i.e. new issues) here, not issues that were already present in the previous release!

TODO

NewPipeExtractor version

This version of NewPipe will ship with NewPipeExtractor version 0.23.0
-> the NPE release still hasn't been done ;-)

App changelog

New

Improved

Fixed

Localization

Development

@swarupbc

This comment was marked as spam.

@avently
Copy link
Contributor

avently commented Jun 26, 2022

Network operations like viewing youtube videos and seeking is so much faster than before, so cool

@opusforlife2

This comment was marked as resolved.

@opusforlife2
Copy link
Collaborator

This one isn't a livestream, but a normal video. And I haven't seen this error before either.

Exception

  • User Action: play stream
  • Request: Player error[type=ERROR_CODE_IO_NETWORK_CONNECTION_TIMEOUT] occurred while playing https://www.youtube.com/watch?v=_9hMQshZNNo
  • Content Country: CH
  • Content Language: en-IN
  • App Language: en_IN
  • Service: YouTube
  • Version: 0.23.1
  • OS: Linux Android 10 - 29
Crash log

com.google.android.exoplayer2.ExoPlaybackException: Source error
	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleIoException(ExoPlayerImplInternal.java:641)
	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:613)
	at android.os.Handler.dispatchMessage(Handler.java:103)
	at android.os.Looper.loop(Looper.java:214)
	at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: com.google.android.exoplayer2.upstream.HttpDataSource$HttpDataSourceException: java.net.SocketTimeoutException: failed to connect to rr2---sn-cvh76nlz.googlevideo.com/173.194.154.167 (port 443) from /[blahblahIP] (port [blahblah]) after 8000ms
	at org.schabi.newpipe.player.datasource.YoutubeHttpDataSource.open(YoutubeHttpDataSource.java:389)
	at com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:258)
	at com.google.android.exoplayer2.upstream.TeeDataSource.open(TeeDataSource.java:52)
	at com.google.android.exoplayer2.upstream.cache.CacheDataSource.openNextSource(CacheDataSource.java:786)
	at com.google.android.exoplayer2.upstream.cache.CacheDataSource.open(CacheDataSource.java:599)
	at com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:84)
	at com.google.android.exoplayer2.source.chunk.ContainerMediaChunk.load(ContainerMediaChunk.java:124)
	at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:412)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
	at java.lang.Thread.run(Thread.java:919)
Caused by: java.net.SocketTimeoutException: failed to connect to rr2---sn-cvh76nlz.googlevideo.com/173.194.154.167 (port 443) from /[blahblahIP] (port [blahblah]) after 8000ms
	at libcore.io.IoBridge.connectErrno(IoBridge.java:191)
	at libcore.io.IoBridge.connect(IoBridge.java:135)
	at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
	at java.net.Socket.connect(Socket.java:621)
	at com.android.okhttp.internal.Platform.connectSocket(Platform.java:182)
	at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:145)
	at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116)
	at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186)
	at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
	at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
	at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
	at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
	at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
	at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:131)
	at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:90)
	at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:30)
	at org.schabi.newpipe.player.datasource.YoutubeHttpDataSource.makeConnection(YoutubeHttpDataSource.java:704)
	at org.schabi.newpipe.player.datasource.YoutubeHttpDataSource.makeConnection(YoutubeHttpDataSource.java:548)
	at org.schabi.newpipe.player.datasource.YoutubeHttpDataSource.open(YoutubeHttpDataSource.java:383)
	... 10 more


@opusforlife2
Copy link
Collaborator

opusforlife2 commented Jun 27, 2022

Oh, and I don't know if this is a regression. YT Shorts thumbnails are now fit to width, cutting off the top and bottom portions, instead of fit to height, with black bars on the side, like in the current release.

Edit: I wasn't specific enough. This is for list item thumbnails. The ones that are shown on the video details page are fine.

@AudricV
Copy link
Member

AudricV commented Jun 29, 2022

Ended age-restricted livestreams cannot be watched anymore.

Reason: the client used to bypass age-restricted contents only provides a DASH and a HLS manifest, which are incomplete, and no audio or video stream seems to be provided (issue was reproduced on video PXvs97_7z2I, now rencoded as a video and non-age restricted) -> a StreamExtractException exception with the message Could not get any stream is thrown.

In order to fix this issue, we have to parse the DASH manifest (again, and so reintroduce DashMpdParser in the extractor) to extract Streams objects and:

  • calculate the average duration between two segments;
  • extract the base streaming URL;
  • build an ItagItem;
  • make YoutubePostLiveStreamDvrDashManifestCreator accepts "parameters and values" using / instead of & and = (edit: we can also convert the URL to use query parameters instead of a full path);
  • and probably more.

Screenshot of the streamingData object returned in this case for the client used to bypass age-restricted contents:

YouTube streamingData postLiveDvr age-restricted contents

@AudricV
Copy link
Member

AudricV commented Jul 1, 2022

@opusforlife2

Livestreams often error out due to source errors, but I haven't seen this HLS one yet. Not sure if it's a regression or just another regular livestream error.

That's the exception (PlaylistStuckException) for which coefficient was slightly increased. There is nothing we can do about this, and is related to a server-side issue (the error means that the manifest has been not updated since a while, if I am not wrong). It can also happen on the end of brodcasts, because YouTube doesn't end properly HLS manifests sometimes.

This one isn't a livestream, but a normal video. And I haven't seen this error before either.

Were you listening to the content or were you watching it? The TimeoutExceptions may happen in background because of battery optimizations, especially the agressive ones of OEMs, which can do sometimes strange behaviors on networks state. I got this issue probably at most three times row since I use #8153 (for two months at least and maybe more) on my phone running EMUI. If you were watching the content, then that's probably a network/server issue.

We can also increase the connection timeout, if that's needed.

Oh, and I don't know if this is a regression. YT Shorts thumbnails are now fit to width, cutting off the top and bottom portions, instead of fit to height, with black bars on the side, like in the current release.

That's a YouTube change on short thumbnails (which are returned without "borders" (so not anymore in the 16/9 format) on which we can't really do something, except that we can remove the sqp and/or the rs parameters to get original thumbnails from the image URL to get again a 16/9 format.

The only issue is that thumbnails which have normally black bars but don't have them using these parameters will get black bars, which isn't something we'd like to have I think.

Also, shorts thumbnail URLs seem to use a _2 in the end of the thumbnail name.

Finally, contrary to videos, there is now only one thumbnail returned for shorts:

InnerTube_trending_shorts_thumbnails

In conclusion, this change is not a regression at all (and is also reproducible on the current release for me).

@opusforlife2
Copy link
Collaborator

If you were watching the content, then that's probably a network/server issue. We can also increase the connection timeout, if that's needed.

I was watching. I was thinking that there might be need somewhere in the code to request YT to refresh the connection, instead of just increasing the timeout? If timeout is the only option, then yeah, increasing that might be good. Although I think we might need to test if that helps at all.

@opusforlife2
Copy link
Collaborator

The only issue is that thumbnails which have normally black bars but don't have them using these parameters will get black bars, which isn't something we'd like to have I think.

Why? If it's just Shorts thumbnails displaying this behaviour, they will always be in 16:9 aspect ratio, and should have black bars.

Are you saying the proposed code change will affect non-Shorts thumbnails as well, and there is no way to prevent that?

@Donkey-Doug
Copy link

FYI, this completely fixes the intermittent, constant buffering issue for me.

@Stypox
Copy link
Member Author

Stypox commented Jul 4, 2022

@opusforlife2 according to what @AudricV explained above, thumbnails are now extracted at their original size, instead of at the forced-16:9 size like before (which included black bars for shorts). So the extractor has only improved and there is no regression there. The only problem is that thumbnails in NewPipe are not rendered in an optimal way, cropping them instead of showing them whole. I'll open a PR about this.

@Stypox
Copy link
Member Author

Stypox commented Jul 4, 2022

I would like to release tomorrow, if nothing blocking comes up. I updated the apk with the latest (small) changes, and also provided a release APK if someone wants to test it out. :-)

@Stypox Stypox closed this as completed Jul 5, 2022
@AudricV AudricV unpinned this issue Jul 5, 2022
@AudricV AudricV mentioned this issue Jul 12, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants