- 06 Jun, 2021 24 commits
-
-
The docs on setLicenseUri say it's optional, and it has been since https://github.com/google/ExoPlayer/commit/379cd8a04f0bf44a9422a08440223581b2657d74 (which should have changed this javadoc too) #minor-release PiperOrigin-RevId: 376139158
ibaker committed -
Authentication sequence in RTSP: - Server replies "Unauthorized" to our DESCRIBE request, and includes the necessary information (i.e. realm, digest nonce, etc) in WWW-Authenticate header - After `RtspClient` receives the response, we - Parse the WWW-Authenticate header, stores the auth info. The info is saved for all further RTSP requests (that all need to carry authorization headers) - send the second DESCRIBE request with the Authorization header. #minor-release PiperOrigin-RevId: 376116302claincly committed -
Issue: #8985 #minor-release PiperOrigin-RevId: 375913914
olly committed -
The method openSocket in RtspMessageChannel does not actually open a socket. The 'open' term refers more to opening the message channel. #minor-release PiperOrigin-RevId: 375908999
claincly committed -
The callbacks received RTSP messages and RTSP sending errors are now invoked directly from RtspMessageChannel's internal threads. It's up to the handler implementation to decide which thread to handle the messages. #minor-release PiperOrigin-RevId: 375908282
claincly committed -
Previously, RTSP interleaved binary data is posted onto the playback thread for handling, the playback thread then adds the received data to a queue. A loader thread will later dequeue the data and process it. In this CL, the binary data is sent through a separate listener, on RtspMessageChannel's RTSP receiving thread. #minor-release PiperOrigin-RevId: 375907609
claincly committed -
Some RTSP servers will offer multiple WWW-Authenticate options. We wanted to be able to pick them up. #minor-release PiperOrigin-RevId: 375907276
claincly committed -
Currently acquireSession() fails with an NPE from checkNotNull(exoMediaDrm). A follow-up change will result in exoMediaDrm sometimes being non-null while prepareCount==0 (and in this case we still want acquireSession() to fail). preacquireSession() doesn't currently fail in a way the caller can observe - the same NPE is thrown, but asynchronously and it doesn't propagate out of the background thread. Throwing directly seems preferable since it's a clear bug to be trying to preacquire sessions from an unprepared/released manager. PiperOrigin-RevId: 375906450
ibaker committed -
#minor-release PiperOrigin-RevId: 375674759
samrobinson committed -
PiperOrigin-RevId: 375484765
Oliver Woodman committed -
Without this the Cue isn't deeply immutable, which can be a bit surprising. PiperOrigin-RevId: 375477571
ibaker committed -
PiperOrigin-RevId: 375436117
ibaker committed -
#minor-release PiperOrigin-RevId: 375435339
samrobinson committed -
#minor-release PiperOrigin-RevId: 375097412
samrobinson committed -
Its absence seems to have caused https://github.com/google/ExoPlayer/issues/8969. #minor-release PiperOrigin-RevId: 375058222
krocard committed -
PiperOrigin-RevId: 375054051
olly committed -
We need to avoid reading and skipping into preload chunks as they may need to be discarded. The current code iterates over all chunks, but this can be simplified by just checking the last chunk knowing that the preload chunk must always be the last one. As a result, we avoid calling getFirstSampleIndex on all chunks. This is a bug since the method is not allowed to be called for chunks that have been spliced in. This still leaves the smaller issue of potentially calling this method for spliced-in preload chunks, which will be solved separately. Issue: #8937 PiperOrigin-RevId: 375053638
tonihei committed -
Preload chunks may still need to be discarded. However, we don't currently support discarding spliced-in chunks. Thus, we need to avoid loadng a preload chunk that needs to be spliced-in. Issue: #8937 #minor-release PiperOrigin-RevId: 374851661
tonihei committed -
#minor-release PiperOrigin-RevId: 374433331
claincly committed -
Gradle warns against passing a relative path to `new File(String)`: https://docs.gradle.org/current/userguide/working_with_files.html#sec:single_file_paths This change fixes all usages of `exoplayerRoot` to pass it to Gradle's `Project.file()` first, which returns an absolute `File`. To reproduce the problem in Issue: #8927: 1. Checkout ExoPlayer git project, to e.g. `~/ExoPlayer/exoplayer-git` 2. Create a new Android Studio project in e.g. `~/AndroidStudioProjects/exoplayer-test` 3. Edit the new project's `settings.gradle` file as described in https://github.com/google/ExoPlayer/blob/release-v2/README.md using a relative path for `exoplayerRoot`: ``` gradle.ext.exoplayerRoot = '../../ExoPlayer/exoplayer-git' ``` 4. In a shell: ```bash $ cd ~/AndroidStudioProjects/exoplayer-test/app $ ../gradlew build ``` (Step 4 is important, it seems running `./gradlew` from the project root doesn't trigger the relative path problem) This change fixes the problem, and also works with `exoplayerRoot` as a `File` or `Path` object. `String`, `File` and `Path` all work with relative or absolute paths: ``` gradle.ext.exoplayerRoot = '/home/ibaker/ExoPlayer/exoplayer-git' gradle.ext.exoplayerRoot = '../../ExoPlayer/exoplayer-git' gradle.ext.exoplayerRoot = new File('/home/ibaker/ExoPlayer/exoplayer-git') gradle.ext.exoplayerRoot = new File('../../ExoPlayer/exoplayer-git') gradle.ext.exoplayerRoot = Paths.get('/home/ibaker/ExoPlayer/exoplayer-git') gradle.ext.exoplayerRoot = Paths.get('../../ExoPlayer/exoplayer-git') ``` Note: The Path versions above require importing `java.nio.file.Paths` and changing the `apply from:` line in the project's settings.gradle file to something like: ``` apply from: file(gradle.ext.exoplayerRoot.resolve('core_settings.gradle')) ``` It's assumed that a project wanting to pass a `Path` will make these changes. Issue: #8927 PiperOrigin-RevId: 374421627
ibaker committed -
#minor-release PiperOrigin-RevId: 374235979
samrobinson committed -
#minor-release PiperOrigin-RevId: 373410795
samrobinson committed -
PiperOrigin-RevId: 374161340
olly committed -
PiperOrigin-RevId: 373142159
kim-vde committed
-
- 03 Jun, 2021 2 commits
-
-
Oliver Woodman committed
-
Oliver Woodman committed
-
- 17 May, 2021 3 commits
- 14 May, 2021 3 commits
-
-
Oliver Woodman committed
-
r2.14.0
Oliver Woodman committed -
Issue: #8927 #minor-release PiperOrigin-RevId: 373752448
ibaker committed
-
- 13 May, 2021 3 commits
-
-
This is mainly so that developers can try out RTSP with the main demo app without having to change the build.gradle file. The change also aligns what media can be played across the different demo apps. #minor-release PiperOrigin-RevId: 373591974
olly committed -
#minor-release PiperOrigin-RevId: 373550935
olly committed -
#minor-release PiperOrigin-RevId: 373543587
olly committed
-
- 12 May, 2021 5 commits
-
-
#minor-release PiperOrigin-RevId: 373402932
olly committed -
#minor-release PiperOrigin-RevId: 373336127
claincly committed -
NAT will block off incoming UDP connection because the router has no knowledge of the necessary port mapping (the mapping is never set up because UDP is connectionless). The end result is, the UDP socket to receive RTP data will timeout. After the `SocketTimeoutException` is caught, the following takes place to try streaming with TCP (or, RTP over RTSP). - `RtspClient` sends TEARDOWN to tear down the current session. - `RtspClient` re-connect to the RTSP server. - `RtspMediaPeriod` cancels all loading `RtpDataLoadables` (that are using UDP) - `RtspMediaPeriod` constructs new `RtpDataLoadables` that use `TransferRtpDataChannel`, and starts loading. - Once the `RtpDataLoadables` are up and running, we are ready to receive. `RtspClient` sends the SETUP requests. - The rest of the flow is unchanged. #minor-release PiperOrigin-RevId: 373310774claincly committed -
#minor-release PiperOrigin-RevId: 373175041
claincly committed -
#minor-release PiperOrigin-RevId: 373173075
claincly committed
-