Issue with Custom Headers in ExoPlayer - "Connection Reset" Before Playback
@marcbaechinger is already working on this.
Since Feb 3, 2025.
- Dominant language
- Java
- Stars
- 3k
- Forks
- 955
- Avg merge
- 12d 14h
- Merged PRs (30d)
- 2
Description
Dear ExoPlayer Team,
I am experiencing an issue with ExoPlayer when using custom headers for streaming. My server requires specific request headers (such as User-Agent, Referer, Origin, etc.), and without them, playback does not work. I have properly set these headers using DefaultHttpDataSource.Factory() in my implementation.
However, the problem is that when attempting to play a stream, ExoPlayer initially fails multiple times with the following error before eventually playing the stream successfully:
EventLogger E internalError [eventTime=0.58, mediaPos=18.52, window=0, period=0, loadError
androidx.media3.datasource.HttpDataSource$HttpDataSourceException: java.net.SocketException: Connection reset
at androidx.media3.datasource.DefaultHttpDataSource.open(DefaultHttpDataSource.java:370)
at androidx.media3.datasource.StatsDataSource.open(StatsDataSource.java:88)
at androidx.media3.exoplayer.hls.HlsMediaChunk.prepareExtraction(HlsMediaChunk.java:523)
at androidx.media3.exoplayer.hls.HlsMediaChunk.feedDataToExtractor(HlsMediaChunk.java:496)
at androidx.media3.exoplayer.hls.HlsMediaChunk.loadMedia(HlsMediaChunk.java:465)
at androidx.media3.exoplayer.hls.HlsMediaChunk.load(HlsMediaChunk.java:422)
at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:453)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at java.lang.Thread.run(Thread.java:1012)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:191)
at java.net.SocketInputStream.read(SocketInputStream.java:143)
at com.android.okhttp.okio.Okio$2.read(Okio.java:138)
at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:213)
at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:307)
at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:301)
at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:197)
at com.android.okhttp.internal.http.Http1xStream.readResponse(Http1xStream.java:188)
at com.android.okhttp.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:129)
at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:750)
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:622)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:475)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:542)
at androidx.media3.datasource.DefaultHttpDataSource.makeConnection(DefaultHttpDataSource.java:550)
at androidx.media3.datasource.DefaultHttpDataSource.open(DefaultHttpDataSource.java:364)
at androidx.media3.datasource.StatsDataSource.open(StatsDataSource.java:88)
at androidx.media3.exoplayer.hls.HlsMediaChunk.prepareExtraction(HlsMediaChunk.java:523)
at androidx.media3.exoplayer.hls.HlsMediaChunk.feedDataToExtractor(HlsMediaChunk.java:496)
at androidx.media3.exoplayer.hls.HlsMediaChunk.loadMedia(HlsMediaChunk.java:465)
at androidx.media3.exoplayer.hls.HlsMediaChunk.load(HlsMediaChunk.java:422)
at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:453)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at java.lang.Thread.run(Thread.java:1012)
This does not happen in other media players (such as VLC, MX Player, or JWPlayer), which play the stream immediately without issues. I have tested using a demo app, but I could not properly implement custom headers in the demo.
Could you please provide guidance on whether there is a specific way to handle custom headers in ExoPlayer? If needed, I can provide a test stream URL along with the required headers for you to investigate further.
Looking forward to your response.
Best regards,
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.