Android Exoplayer播放UDP流无音频



im在android webview中是新的,我在android webview中使用外部层播放视频,我播放的视频有2类,第一辆mp4,运行良好。第二流(单播m3u8和UDP(视频播放良好,但没有音频,我尝试在流vlc中播放源有音频,

这是我的密码。

private void initializePlayerMulticast(Uri mUri) {
Toast.makeText(ExoPlayer.this, "Hello bro multicast woi hehee", Toast.LENGTH_LONG).show();
player = ExoPlayerFactory.newSimpleInstance(this);
UdpDataSource.Factory test = buildDataSourceFactory();
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
ExtractorMediaSource mediaSource = new ExtractorMediaSource
.Factory(test)
.setExtractorsFactory(extractorsFactory)
.createMediaSource(mUri);
videoView.setPlayer(player);
player.prepare(mediaSource);
player.setPlayWhenReady(true);
}
private DataSource.Factory buildDataSourceFactory() {
return new UdpDataSource.Factory() {
@Override
public DataSource createDataSource() {
return new UdpDataSource(5000, 100000);
}
};
}

抱歉英语不好。。

您可以使用以下代码来播放.m3u8文件:-

Handler mHandler = new Handler();
String userAgent = Util.getUserAgent(context, "APP_NAME");
DataSource.Factory dataSourceFactory = new DefaultHttpDataSourceFactory(
userAgent, null,
DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
1800000,
true);
HlsMediaSource mediaSource = new HlsMediaSource(Uri.parse(mediaUrl),dataSourceFactory, 1800000,mHandler, null);
if (mediaUrl != null) {
videoPlayer.prepare(mediaSource);
videoPlayer.setPlayWhenReady(true);
}

在我的案例中,音频也是一个问题。所以我通过确保比特率高于20(也可以是1(以及视频的高度来修复它。代码如下:

private void extractYoutubeUrl() {
new YouTubeExtractor(this) {
@SuppressLint("StaticFieldLeak")
@Override
public void onExtractionComplete(SparseArray<YtFile> ytFiles, VideoMeta vMeta) {
if (ytFiles != null) {
for (int i = 0, itag; i < ytFiles.size(); i++) {
itag = ytFiles.keyAt(i);
YtFile ytFile = ytFiles.get(itag);                       
String extn=ytFile.getFormat().getExt();
int height = ytFile.getFormat().getHeight();
int audibit = ytFile.getFormat().getAudioBitrate();
if(height>200 & audibit>20){
playVideo(ytFile.getUrl());
Log.i("audiobitrate",String.valueOf(ytFile.getFormat().getAudioBitrate()));
}
}
}else{

}
}
}
.extract(mYoutubeLink, true, true);
}

最新更新