Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
NotesChapter
ExoPlayer
提交
ed3d1c62
E
ExoPlayer
项目概览
NotesChapter
/
ExoPlayer
与 Fork 源项目一致
从无法访问的项目Fork
通知
6
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
ExoPlayer
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
ed3d1c62
编写于
2月 11, 2021
作者:
A
andrewlewis
提交者:
Oliver Woodman
2月 12, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Don't set playback parameters when using tunneling
Issue: #4803 PiperOrigin-RevId: 356923345
上级
d0dd33e5
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
47 addition
and
12 deletion
+47
-12
RELEASENOTES.md
RELEASENOTES.md
+3
-0
library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java
...com/google/android/exoplayer2/audio/DefaultAudioSink.java
+30
-12
library/core/src/test/java/com/google/android/exoplayer2/audio/DefaultAudioSinkTest.java
...google/android/exoplayer2/audio/DefaultAudioSinkTest.java
+14
-0
未找到文件。
RELEASENOTES.md
浏览文件 @
ed3d1c62
...
@@ -5,6 +5,9 @@
...
@@ -5,6 +5,9 @@
*
Core library:
*
Core library:
*
Fix playback issue for HLS live streams without program date time
*
Fix playback issue for HLS live streams without program date time
information (
[
#8560
](
https://github.com/google/ExoPlayer/issues/8560
)
).
information (
[
#8560
](
https://github.com/google/ExoPlayer/issues/8560
)
).
*
Fix a bug where setting playback parameters while using video tunneling
would cause an error to be thrown
(
[
#8570
](
https://github.com/google/ExoPlayer/issues/8570
)
).
*
IMA extension:
*
IMA extension:
*
Fix handling of repeated ad loads, to avoid ads being discarded if the
*
Fix handling of repeated ad loads, to avoid ads being discarded if the
user seeks away and then back to a preloaded postroll (for example).
user seeks away and then back to a preloaded postroll (for example).
...
...
library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java
浏览文件 @
ed3d1c62
...
@@ -488,7 +488,6 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -488,7 +488,6 @@ public final class DefaultAudioSink implements AudioSink {
throws
ConfigurationException
{
throws
ConfigurationException
{
int
inputPcmFrameSize
;
int
inputPcmFrameSize
;
@Nullable
AudioProcessor
[]
availableAudioProcessors
;
@Nullable
AudioProcessor
[]
availableAudioProcessors
;
boolean
canApplyPlaybackParameters
;
@OutputMode
int
outputMode
;
@OutputMode
int
outputMode
;
@C
.
Encoding
int
outputEncoding
;
@C
.
Encoding
int
outputEncoding
;
...
@@ -500,11 +499,10 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -500,11 +499,10 @@ public final class DefaultAudioSink implements AudioSink {
Assertions
.
checkArgument
(
Util
.
isEncodingLinearPcm
(
inputFormat
.
pcmEncoding
));
Assertions
.
checkArgument
(
Util
.
isEncodingLinearPcm
(
inputFormat
.
pcmEncoding
));
inputPcmFrameSize
=
Util
.
getPcmFrameSize
(
inputFormat
.
pcmEncoding
,
inputFormat
.
channelCount
);
inputPcmFrameSize
=
Util
.
getPcmFrameSize
(
inputFormat
.
pcmEncoding
,
inputFormat
.
channelCount
);
boolean
useFloatOutput
=
enableFloatOutput
&&
Util
.
isEncodingHighResolutionPcm
(
inputFormat
.
pcmEncoding
);
availableAudioProcessors
=
availableAudioProcessors
=
useFloatOutput
?
toFloatPcmAvailableAudioProcessors
:
toIntPcmAvailableAudioProcessors
;
shouldUseFloatOutput
(
inputFormat
.
pcmEncoding
)
canApplyPlaybackParameters
=
!
useFloatOutput
;
?
toFloatPcmAvailableAudioProcessors
:
toIntPcmAvailableAudioProcessors
;
trimmingAudioProcessor
.
setTrimFrameCount
(
trimmingAudioProcessor
.
setTrimFrameCount
(
inputFormat
.
encoderDelay
,
inputFormat
.
encoderPadding
);
inputFormat
.
encoderDelay
,
inputFormat
.
encoderPadding
);
...
@@ -541,7 +539,6 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -541,7 +539,6 @@ public final class DefaultAudioSink implements AudioSink {
}
else
{
}
else
{
inputPcmFrameSize
=
C
.
LENGTH_UNSET
;
inputPcmFrameSize
=
C
.
LENGTH_UNSET
;
availableAudioProcessors
=
new
AudioProcessor
[
0
];
availableAudioProcessors
=
new
AudioProcessor
[
0
];
canApplyPlaybackParameters
=
false
;
outputSampleRate
=
inputFormat
.
sampleRate
;
outputSampleRate
=
inputFormat
.
sampleRate
;
outputPcmFrameSize
=
C
.
LENGTH_UNSET
;
outputPcmFrameSize
=
C
.
LENGTH_UNSET
;
if
(
enableOffload
&&
isOffloadedPlaybackSupported
(
inputFormat
,
audioAttributes
))
{
if
(
enableOffload
&&
isOffloadedPlaybackSupported
(
inputFormat
,
audioAttributes
))
{
...
@@ -586,7 +583,6 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -586,7 +583,6 @@ public final class DefaultAudioSink implements AudioSink {
outputEncoding
,
outputEncoding
,
specifiedBufferSize
,
specifiedBufferSize
,
enableAudioTrackPlaybackParams
,
enableAudioTrackPlaybackParams
,
canApplyPlaybackParameters
,
availableAudioProcessors
);
availableAudioProcessors
);
if
(
isAudioTrackInitialized
())
{
if
(
isAudioTrackInitialized
())
{
this
.
pendingConfiguration
=
pendingConfiguration
;
this
.
pendingConfiguration
=
pendingConfiguration
;
...
@@ -1336,11 +1332,11 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -1336,11 +1332,11 @@ public final class DefaultAudioSink implements AudioSink {
private
void
applyAudioProcessorPlaybackParametersAndSkipSilence
(
long
presentationTimeUs
)
{
private
void
applyAudioProcessorPlaybackParametersAndSkipSilence
(
long
presentationTimeUs
)
{
PlaybackParameters
playbackParameters
=
PlaybackParameters
playbackParameters
=
configuration
.
canApplyPlaybackParameters
shouldApplyAudioProcessorPlaybackParameters
()
?
audioProcessorChain
.
applyPlaybackParameters
(
getAudioProcessorPlaybackParameters
())
?
audioProcessorChain
.
applyPlaybackParameters
(
getAudioProcessorPlaybackParameters
())
:
PlaybackParameters
.
DEFAULT
;
:
PlaybackParameters
.
DEFAULT
;
boolean
skipSilenceEnabled
=
boolean
skipSilenceEnabled
=
configuration
.
canApplyPlaybackParameters
shouldApplyAudioProcessorPlaybackParameters
()
?
audioProcessorChain
.
applySkipSilenceEnabled
(
getSkipSilenceEnabled
())
?
audioProcessorChain
.
applySkipSilenceEnabled
(
getSkipSilenceEnabled
())
:
DEFAULT_SKIP_SILENCE
;
:
DEFAULT_SKIP_SILENCE
;
mediaPositionParametersCheckpoints
.
add
(
mediaPositionParametersCheckpoints
.
add
(
...
@@ -1355,6 +1351,31 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -1355,6 +1351,31 @@ public final class DefaultAudioSink implements AudioSink {
}
}
}
}
/**
* Returns whether audio processor playback parameters should be applied in the current
* configuration.
*/
private
boolean
shouldApplyAudioProcessorPlaybackParameters
()
{
// We don't apply speed/pitch adjustment using an audio processor in the following cases:
// - in tunneling mode, because audio processing can change the duration of audio yet the video
// frame presentation times are currently not modified (see also
// https://github.com/google/ExoPlayer/issues/4803);
// - when playing encoded audio via passthrough/offload, because modifying the audio stream
// would require decoding/re-encoding; and
// - when outputting float PCM audio, because SonicAudioProcessor outputs 16-bit integer PCM.
return
!
tunneling
&&
MimeTypes
.
AUDIO_RAW
.
equals
(
configuration
.
inputFormat
.
sampleMimeType
)
&&
!
shouldUseFloatOutput
(
configuration
.
inputFormat
.
pcmEncoding
);
}
/**
* Returns whether audio in the specified PCM encoding should be written to the audio track as
* float PCM.
*/
private
boolean
shouldUseFloatOutput
(
@C
.
PcmEncoding
int
pcmEncoding
)
{
return
enableFloatOutput
&&
Util
.
isEncodingHighResolutionPcm
(
pcmEncoding
);
}
/**
/**
* Applies and updates media position parameters.
* Applies and updates media position parameters.
*
*
...
@@ -1897,7 +1918,6 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -1897,7 +1918,6 @@ public final class DefaultAudioSink implements AudioSink {
public
final
int
outputChannelConfig
;
public
final
int
outputChannelConfig
;
@C
.
Encoding
public
final
int
outputEncoding
;
@C
.
Encoding
public
final
int
outputEncoding
;
public
final
int
bufferSize
;
public
final
int
bufferSize
;
public
final
boolean
canApplyPlaybackParameters
;
public
final
AudioProcessor
[]
availableAudioProcessors
;
public
final
AudioProcessor
[]
availableAudioProcessors
;
public
Configuration
(
public
Configuration
(
...
@@ -1910,7 +1930,6 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -1910,7 +1930,6 @@ public final class DefaultAudioSink implements AudioSink {
int
outputEncoding
,
int
outputEncoding
,
int
specifiedBufferSize
,
int
specifiedBufferSize
,
boolean
enableAudioTrackPlaybackParams
,
boolean
enableAudioTrackPlaybackParams
,
boolean
canApplyPlaybackParameters
,
AudioProcessor
[]
availableAudioProcessors
)
{
AudioProcessor
[]
availableAudioProcessors
)
{
this
.
inputFormat
=
inputFormat
;
this
.
inputFormat
=
inputFormat
;
this
.
inputPcmFrameSize
=
inputPcmFrameSize
;
this
.
inputPcmFrameSize
=
inputPcmFrameSize
;
...
@@ -1919,7 +1938,6 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -1919,7 +1938,6 @@ public final class DefaultAudioSink implements AudioSink {
this
.
outputSampleRate
=
outputSampleRate
;
this
.
outputSampleRate
=
outputSampleRate
;
this
.
outputChannelConfig
=
outputChannelConfig
;
this
.
outputChannelConfig
=
outputChannelConfig
;
this
.
outputEncoding
=
outputEncoding
;
this
.
outputEncoding
=
outputEncoding
;
this
.
canApplyPlaybackParameters
=
canApplyPlaybackParameters
;
this
.
availableAudioProcessors
=
availableAudioProcessors
;
this
.
availableAudioProcessors
=
availableAudioProcessors
;
// Call computeBufferSize() last as it depends on the other configuration values.
// Call computeBufferSize() last as it depends on the other configuration values.
...
...
library/core/src/test/java/com/google/android/exoplayer2/audio/DefaultAudioSinkTest.java
浏览文件 @
ed3d1c62
...
@@ -320,6 +320,20 @@ public final class DefaultAudioSinkTest {
...
@@ -320,6 +320,20 @@ public final class DefaultAudioSinkTest {
assertThat
(
thrown
.
format
).
isEqualTo
(
format
);
assertThat
(
thrown
.
format
).
isEqualTo
(
format
);
}
}
@Test
public
void
setPlaybackParameters_doesNothingWhenTunnelingIsEnabled
()
throws
Exception
{
defaultAudioSink
.
setAudioSessionId
(
1
);
defaultAudioSink
.
enableTunnelingV21
();
defaultAudioSink
.
setPlaybackParameters
(
new
PlaybackParameters
(
2
));
configureDefaultAudioSink
(
/* channelCount= */
2
);
defaultAudioSink
.
handleBuffer
(
createDefaultSilenceBuffer
(),
/* presentationTimeUs= */
5
*
C
.
MICROS_PER_SECOND
,
/* encodedAccessUnitCount= */
1
);
assertThat
(
defaultAudioSink
.
getPlaybackParameters
().
speed
).
isEqualTo
(
1
);
}
private
void
configureDefaultAudioSink
(
int
channelCount
)
throws
AudioSink
.
ConfigurationException
{
private
void
configureDefaultAudioSink
(
int
channelCount
)
throws
AudioSink
.
ConfigurationException
{
configureDefaultAudioSink
(
channelCount
,
/* trimStartFrames= */
0
,
/* trimEndFrames= */
0
);
configureDefaultAudioSink
(
channelCount
,
/* trimStartFrames= */
0
,
/* trimEndFrames= */
0
);
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录