Exoplayer - 如何检查 MP4 视频是否有音频?
Exoplayer - How to check if MP4 video has audio?
我正在使用来自 API 的 URL。一些 URL 是没有声音的 mp4(视频播放时没有声音)。我如何检查该视频是否有声音?我一直在搜索 SimpleExoPlayer 文档并测试我的 URLS
上的方法
https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/SimpleExoPlayer.html 过去几个小时
但我不知道如何检测播放的视频是否有声。
尝试了 getAudioAttributes()、getAudioComponents() 中的所有方法,现在只尝试了 getAudioFormat(),但它们都是 return null。
try{
Log.d(TAG, "onCreateView: " + player.getAudioFormat().channelCount);
}catch (Exception e){
Log.d(TAG, "onCreateView: " + e);
}
是的,我已经确定 link 确实有音频。
您可以使用 Player#EventListener#OnTracksChanged 跟踪当前曲目,并使用 Player#getCurrentTrackGroups() 获取当前曲目。如果您浏览轨道组,您可以查找类型。如果您在那里找到 AUDIO 类型,则表示您的视频文件包含音轨。
如果您还想检查是否选择了任何音轨,那么 Player#getCurrentTrackSelections() 就是要查看的地方。
为了完成@Hamza Khan 的回答,这里是我检查加载的视频是否有音频的代码:
override fun onTracksChanged(
trackGroups: TrackGroupArray?,
trackSelections: TrackSelectionArray?
) {
if (trackGroups != null && !trackGroups.isEmpty){
for (arrayIndex in 0 until trackGroups.length){
for (groupIndex in 0 until trackGroups[arrayIndex].length){
val sampleMimeType = trackGroups[arrayIndex].getFormat(groupIndex).sampleMimeType
if ( sampleMimeType != null && sampleMimeType.contains("audio") ){
//video contains audio
}
}
}
}
}
player.addListener(new Player.EventListener() {
@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
if (trackGroups != null && !trackGroups.isEmpty()) {
for (int i = 0; i < trackGroups.length; i++) {
for (int g = 0; g < trackGroups.get(i).length; g++) {
String sampleMimeType = trackGroups.get(i).getFormat(g).sampleMimeType;
if (sampleMimeType != null && sampleMimeType.contains("audio")) {
//video contains audio
}
}
}
}
}
}
JAVA 版本的 mrj 答案
看到这个帖子对我帮助很大!
我正在使用来自 API 的 URL。一些 URL 是没有声音的 mp4(视频播放时没有声音)。我如何检查该视频是否有声音?我一直在搜索 SimpleExoPlayer 文档并测试我的 URLS
上的方法https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/SimpleExoPlayer.html 过去几个小时
但我不知道如何检测播放的视频是否有声。
尝试了 getAudioAttributes()、getAudioComponents() 中的所有方法,现在只尝试了 getAudioFormat(),但它们都是 return null。
try{
Log.d(TAG, "onCreateView: " + player.getAudioFormat().channelCount);
}catch (Exception e){
Log.d(TAG, "onCreateView: " + e);
}
是的,我已经确定 link 确实有音频。
您可以使用 Player#EventListener#OnTracksChanged 跟踪当前曲目,并使用 Player#getCurrentTrackGroups() 获取当前曲目。如果您浏览轨道组,您可以查找类型。如果您在那里找到 AUDIO 类型,则表示您的视频文件包含音轨。
如果您还想检查是否选择了任何音轨,那么 Player#getCurrentTrackSelections() 就是要查看的地方。
为了完成@Hamza Khan 的回答,这里是我检查加载的视频是否有音频的代码:
override fun onTracksChanged(
trackGroups: TrackGroupArray?,
trackSelections: TrackSelectionArray?
) {
if (trackGroups != null && !trackGroups.isEmpty){
for (arrayIndex in 0 until trackGroups.length){
for (groupIndex in 0 until trackGroups[arrayIndex].length){
val sampleMimeType = trackGroups[arrayIndex].getFormat(groupIndex).sampleMimeType
if ( sampleMimeType != null && sampleMimeType.contains("audio") ){
//video contains audio
}
}
}
}
}
player.addListener(new Player.EventListener() {
@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
if (trackGroups != null && !trackGroups.isEmpty()) {
for (int i = 0; i < trackGroups.length; i++) {
for (int g = 0; g < trackGroups.get(i).length; g++) {
String sampleMimeType = trackGroups.get(i).getFormat(g).sampleMimeType;
if (sampleMimeType != null && sampleMimeType.contains("audio")) {
//video contains audio
}
}
}
}
}
}
JAVA 版本的 mrj 答案
看到这个帖子对我帮助很大!