【发布时间】:2018-12-16 20:04:42
【问题描述】:
我有一个 RTMP 流,我想使用 Exoplayer 库在我的应用中播放。我的设置如下:
TrackSelector trackSelector = new DefaultTrackSelector();
RtmpDataSourceFactory rtmpDataSourceFactory = new RtmpDataSourceFactory(bandwidthMeter);
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
factory = new ExtractorMediaSource.Factory(rtmpDataSourceFactory);
factory.setExtractorsFactory(extractorsFactory);
createSource();
mPlayer = ExoPlayerFactory.newSimpleInstance(mActivity, trackSelector, new DefaultLoadControl(
new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE),
1000, // min buffer
3000, // max buffer
1000, // playback
2000, //playback after rebuffer
DefaultLoadControl.DEFAULT_TARGET_BUFFER_BYTES,
true
));
vwExoPlayer.setPlayer(mPlayer);
mPlayer.addListener(mVideoStreamHandler);
mPlayer.addVideoListener(new VideoListener() {
@Override
public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
Log.d("hasil", "onVideoSizeChanged: w:" + width + ", h:" + height);
String res = width + "x" + height;
resolution.setText(res);
}
@Override
public void onRenderedFirstFrame() {
}
});
其中createSource()如下:
private void createSource() {
mMediaSource180 = factory.createMediaSource(Uri.parse(API.GAME_VIDEO_STREAM_URL_180));
mMediaSource360 = factory.createMediaSource(Uri.parse(API.GAME_VIDEO_STREAM_URL_360));
mMediaSource720 = factory.createMediaSource(Uri.parse(API.GAME_VIDEO_STREAM_URL_720));
mMediaSourceAudio = factory.createMediaSource(Uri.parse(API.GAME_AUDIO_STREAM_URL));
}
我目前的问题是只有前三个ExtractorMediaSources 在Exoplayer 中工作正常。 mMediaSourceAudio 拒绝在 Exoplayer 中播放,但在 Android 的 VLC 媒体播放器中运行良好。
现在我怀疑格式是 AAC-LTP,或者需要 VLC 中可用的编解码器但默认 Android 中没有的任何 AAC 变体。但是,我无权访问编码过程,所以我不确定。
如果不是这样,那是什么?
编辑:
我一直在调试BandwidthMeter 并添加了MediaSourceEventListener。当我使用普通视频源时,onDownstreamFormatChanged() 会被调用,但在我使用音频流源时不会。
此外,BandwidthMeter 工作正常,总是在流的所有部分下载字节,当视频流进入时会下载更多字节,但仅在音频流中,当我调用 mPlayer.getBufferedPosition() 时,返回值始终为 0。此外,当我使用音频流源时,没有调用 OMX 代码 - 没有设置解码器。
我是否看到格式错误的音频流,或者我需要更改我的 Exoplayer 的设置?
编辑 2:
进一步调试发现,在所有视频流和音频流中,都使用了相同的FlvExtractor。即使视频流具有avc 视频轨道编码和mp4a-latm 音频轨道编码。这正常吗?
【问题讨论】: