- 10 Jun, 2021 8 commits
-
-
PiperOrigin-RevId: 377106891
olly committed -
Oliver Woodman committed
-
RtspMediaSource uses the timeline update paradigm from ProgressiveMediaPeriod. PiperOrigin-RevId: 378150758
claincly committed -
The size of rtspLoaderWrappers must match the number of tracks exposed by the RTSP session (a track is exposed if its media description entry appears in DESCRIBE's SDP response). When retrying with TCP, the old code will start loading all exposed RTSP tracks, regardless of whether they are selected. The fixed code will only start loading selected tracks. #minor-release PiperOrigin-RevId: 377931030
claincly committed -
The current code does not catch the IAE thrown when building a MediaDescription or SessionDescription. This CL catches the IAE and propagates it as a ParserException. Issue: #9014. PiperOrigin-RevId: 377544439
claincly committed -
The old version's retry logic will not work if using authentication. Specifically, we use the same authentication parameters from the previous session, and the RTSP server will reject such parameter. In this fix, we reset the authentication info on retry. Further, we retry the last request on receiving a 401 Unauthorized, rather than sending out another DESCRIBE request. #minor-release PiperOrigin-RevId: 377539711
claincly committed -
#minor-release PiperOrigin-RevId: 377476603
claincly committed -
Related to Issue: #8941. RTSP message body's format is not regulated by the RTSP spec, meaning it can use either CRLF or LF as its line terminator. The old code assumes every line ends with CRLF (RTSP message and the message body); the new code will rely on the Content-Length information to receive the bytes for the message body. #minor-release PiperOrigin-RevId: 377475565
claincly committed
-
- 07 Jun, 2021 2 commits
-
-
Also added test cases covering this. PiperOrigin-RevId: 374218514
tonihei committed -
PiperOrigin-RevId: 373343326
Oliver Woodman committed
-
- 06 Jun, 2021 30 commits
-
-
olly committed
-
`SurfaceTexture` provides a transform matrix with each buffer. Previously gldemo ignored this but it is important to apply it to have the video render properly. The transformation matrix from the surface texture includes flipping so this change removes the hard-coded flipping from `a_texcoord`. Issue: #8992 #minor-release PiperOrigin-RevId: 377271389
andrewlewis committed -
#minor-release PiperOrigin-RevId: 377269770
olly committed -
Related to: Issue: #9010 Profile-level-id (Format.codecs) can be generated from SPS if SDP does not include it. #minor-release PiperOrigin-RevId: 377251211
claincly committed -
#minor-release PiperOrigin-RevId: 377001305
claincly committed -
A renderer is disabled (without being reset) in two situations: * When transitioning into a period that starts with a discontinuity * When stopping the player with setForegroundMode(true) Before this change the behaviour of `MediaCodecRenderer` when disabled (but not reset) depended on whether the content being decoded had an associated `DrmSession`: * For content without an associated DRM session the MediaCodec instance was kept alive. * For content with an associated DRM session, the MediaCodec instance was released. This was to prevent the DRM session from staying alive and continuing to make license refresh network requests while the player was stopped in 'foreground mode'. This change removes the second bullet, and keeps MediaCodec instances alive in both the secure and insecure case. This will result in the DRM machinery making occasional license refresh network requests (at a frequency defined by the license policy) while the player is stopped and in 'foreground mode'. This network usage is considered to be a 'limited resource' as described by the `ExoPlayer#setForegroundMode` javadoc. This means that switches between secure content (or between secure and clear content when `MediaItem.drmConfiguration.sessionForClearTypes` indicates a secure decoder should be used for clear content) should keep the same video decoder, thus avoiding the 'black flash' that occurs on some devices when switching the surface away from a secure decoder. Issue: #8842 #minor-release PiperOrigin-RevId: 376825501
ibaker committed -
This change introduces a third 'state' for `DefaultDrmSessionManager`: It's been fully released (prepareCount == 0) but at least one of its sessions is still active. In this state new acquisitions are rejected (`(pre)acquireSession()` calls will fail) but the machinery to support the existing sessions (ExoMediaDrm and MediaDrmHandler) is kept until they're all released. This change will allow us to remove the TODO in MediaCodecRenderer that resolves Issue: #8842. PiperOrigin-RevId: 376193952
ibaker committed -
In a follow-up change I will add an additional test to ensure these events continue to be correctly handled when DefaultDrmSessionManager has prepareCount==0 but a non-null ExoMediaDrm instance. PiperOrigin-RevId: 376190225
ibaker committed -
Issue: #8776 PiperOrigin-RevId: 376186877
olly committed -
Many of the setters are ignored unless others are set - this change: * Lists these conditions exhaustively. * Uses more concise language to avoid overshadowing the main details of what the setter sets. * Tweaks the language from 'is ignored' to 'shouldn't be called', to open up the future possibility of throwing an error if these are called without the 'required' setter also being present (see Issue: #8957). #minor-release PiperOrigin-RevId: 376162385
ibaker committed -
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
-