2

我是 android webview 的新手,我使用 exoplayer 在 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);
            }
        };
    }

对不起英语不好..

4

2 回答 2

0

您可以使用以下代码播放 .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);
}
于 2020-03-17T06:34:03.540 回答
0

就我而言,音频也是一个问题。所以我通过确保比特率高于 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);
    }
于 2020-10-21T17:10:25.557 回答