当前位置: 首页 > wzjs >正文

做网站技术方法有做网站的服务器

做网站技术方法有,做网站的服务器,wordpress退出维护,wordpress添加api在之前的文章ExoPlayer中常见MediaSource子类的区别和使用场景中介绍了Exoplayer中各种子MediaSource的使用场景,这篇我们着重详细介绍下实现多路流混合播放的用法。常见的使用场景有:视频文件电影字幕、正片视频广告视频、背景视频背景音乐等。 初始化…

在之前的文章ExoPlayer中常见MediaSource子类的区别和使用场景中介绍了Exoplayer中各种子MediaSource的使用场景,这篇我们着重详细介绍下实现多路流混合播放的用法。常见的使用场景有:视频文件+电影字幕、正片视频+广告视频、背景视频+背景音乐等。

初始化Exoplayer就不多说了,随便查查文档就知道。

ExoPlayer mExoPlayer = new ExoPlayer.Builder(context, new DefaultMediaSourceFactory(context)).build();

1.视频文件+电影字幕(MergingMediaSource)

Uri videoUri = Uri.parse("https://example.com/video.mp4");
Uri subtitleUri = Uri.parse("https://example.com/subtitles.srt");MediaSource videoSource = new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(videoUri);MediaSource subtitleSource = new SingleSampleMediaSource.Factory(dataSourceFactory).createMediaSource(subtitleUri, Format.createTextSampleFormat("subs", MimeTypes.TEXT_SUBRIP, C.SELECTION_FLAG_DEFAULT, "en"));MediaSource mergedSource = new MergingMediaSource(videoSource, subtitleSource);

2.广告视频+正片视频(ConcatenatingMediaSource)

DefaultMediaSourceFactory mediaSourceFactory = new DefaultMediaSourceFactory(dataSourceFactory);// 创建两个视频的 MediaSourceMediaSource video1Source = mediaSourceFactory.createMediaSource(MediaItem.fromUri("asset://android_asset/01.mp4"));MediaSource video2Source = mediaSourceFactory.createMediaSource(MediaItem.fromUri("asset://android_asset/02.mp4"));ConcatenatingMediaSource concatenatingMediaSource = new ConcatenatingMediaSource(video1Source,video2Source);mExoPlayer.setMediaSource(concatenatingMediaSource);

这样就能让两个视频按顺序播放且无缝衔接,若还想它两循环播放,可用LoopingMediaSource进一步封装。

//无限循环
LoopingMediaSource loopingMediaSource = new LoopingMediaSource(concatenatingMediaSource); 
//循环5次
LoopingMediaSource loopingMediaSource = new LoopingMediaSource(concatenatingMediaSource,5);
mExoPlayer.setMediaSource(loopingMediaSource);

3.视频+音频

DefaultMediaSourceFactory mediaSourceFactory = new DefaultMediaSourceFactory(dataSourceFactory);MediaSource video2Source = mediaSourceFactory.createMediaSource(MediaItem.fromUri("asset://android_asset/02.mp4"));
MediaSource audio1Source = mediaSourceFactory.createMediaSource(MediaItem.fromUri("asset://android_asset/audio/ori.mp2"));MergingMediaSource audioMerged = new MergingMediaSource(video2Source , audio1Source);
mExoPlayer.setMediaSource(audioMerged );

 上面是1个视频+1个音频,当然也可以支持1个视频+多个音频,比如电影中有多个不同语言的音轨

DefaultMediaSourceFactory mediaSourceFactory = new DefaultMediaSourceFactory(dataSourceFactory);MediaSource video1Source = mediaSourceFactory.createMediaSource(MediaItem.fromUri("asset://android_asset/01.mp4"));// 合并两个音频源MediaSource audio1Source = mediaSourceFactory.createMediaSource(MediaItem.fromUri("asset://android_asset/audio/ori.mp2"));MediaSource audio2Source = mediaSourceFactory.createMediaSource(MediaItem.fromUri("asset://android_asset/audio/acc.mp2"));MergingMediaSource audioMerged = new MergingMediaSource(audio1Source,audio2Source);
//合并视频和音频MergingMediaSource finalSource = new MergingMediaSource(audioMerged,video1Source);mExoPlayer.setMediaSource(finalSource);

这样就可以实现一个视频混合多个音轨文件的播放了,那么如何动态切换不同音轨呢?TrackSelector

DefaultTrackSelector trackSelector = new DefaultTrackSelector(context);
mExoPlayer = new ExoPlayer.Builder(context, renderersFactory).setTrackSelector(trackSelector)        .build();//查看所有音轨信息private class PlayerEventListener implements Player.Listener {@SuppressLint("UnsafeOptInUsageError")@Overridepublic void onTracksChanged(Tracks tracks) {audioList.clear();Player.Listener.super.onTracksChanged(tracks);ImmutableList<Tracks.Group> trackGroups = tracks.getGroups();for (int index = 0; index < trackGroups.size(); index++) {Tracks.Group group = trackGroups.get(index);for (int jIndex = 0; jIndex < group.length; jIndex++) {Format format = group.getTrackFormat(jIndex);LOG.info("onTracksChanged format=" + Format.toLogString(format));if (MimeTypes.isAudio(format.sampleMimeType)) {audioList.add(format);}}}currentTrackGroups = mExoPlayer.getCurrentTrackGroups();}mExoPlayer.addListener(new PlayerEventListener());// 用户选择第 index 个音轨TrackGroup selectedGroup = null;selectedGroup = currentTrackGroups.get(1); //根据需要选择第几个音轨// 应用新音轨mExoPlayer.setTrackSelectionParameters(mExoPlayer.getTrackSelectionParameters().buildUpon().setOverrideForType(new TrackSelectionOverride(selectedGroup, 0))  // 需要切换到的音轨索引.build());

 这里有个问题就是如果视频和音频时长不一致,特别是想混合多个音频和多个视频时就会出问题,无法播放,报错如下:

E/ExoPlayerImplInternal(11191): Playback error
E/ExoPlayerImplInternal(11191):   com.google.android.exoplayer2.ExoPlaybackException: Source error
E/ExoPlayerImplInternal(11191):       at com.google.android.exoplayer2.ExoPlayerImplInternal.handleIoException(ExoPlayerImplInternal.java:684)
E/ExoPlayerImplInternal(11191):       at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:660)
E/ExoPlayerImplInternal(11191):       at android.os.Handler.dispatchMessage(Handler.java:98)
E/ExoPlayerImplInternal(11191):       at android.os.Looper.loop(Looper.java:136)
E/ExoPlayerImplInternal(11191):       at android.os.HandlerThread.run(HandlerThread.java:61)
E/ExoPlayerImplInternal(11191):   Caused by: com.google.android.exoplayer2.source.MergingMediaSource$IllegalMergeException
E/ExoPlayerImplInternal(11191):       at com.google.android.exoplayer2.source.MergingMediaSource.onChildSourceInfoRefreshed(MergingMediaSource.java:252)
E/ExoPlayerImplInternal(11191):       at com.google.android.exoplayer2.source.MergingMediaSource.onChildSourceInfoRefreshed(MergingMediaSource.java:52)
E/ExoPlayerImplInternal(11191):       at com.google.android.exoplayer2.source.CompositeMediaSource.lambda$prepareChildSource$0$com-google-android-exoplayer2-source-CompositeMediaSource(CompositeMediaSource.java:120)
E/ExoPlayerImplInternal(11191):       at com.google.android.exoplayer2.source.CompositeMediaSource$$ExternalSyntheticLambda0.onSourceInfoRefreshed(D8$$SyntheticClass:0)
E/ExoPlayerImplInternal(11191):       at com.google.android.exoplayer2.source.BaseMediaSource.refreshSourceInfo(BaseMediaSource.java:94)
E/ExoPlayerImplInternal(11191):       at com.google.android.exoplayer2.source.ConcatenatingMediaSource.updateTimelineAndScheduleOnCompletionActions(ConcatenatingMediaSource.java:746)
E/ExoPlayerImplInternal(11191):       at com.google.android.exoplayer2.source.ConcatenatingMediaSource.handleMessage(ConcatenatingMediaSource.java:716)
E/ExoPlayerImplInternal(11191):       at com.google.android.exoplayer2.source.ConcatenatingMediaSource.$r8$lambda$xvlxaabNVihM68DRWdn_WPenrXk(ConcatenatingMediaSource.java)
E/ExoPlayerImplInternal(11191):       at com.google.android.exoplayer2.source.ConcatenatingMediaSource$$ExternalSyntheticLambda0.handleMessage(D8$$SyntheticClass:0)
E/ExoPlayerImplInternal(11191):       ... 3 more

 这个主要是播放时长不一致,无法同步时序导致,下一篇再讨论如何解决此类情况。


文章转载自:

http://2tAQEUOl.qbgdy.cn
http://9CzeV548.qbgdy.cn
http://gXCa2ynf.qbgdy.cn
http://eMnJ2MW6.qbgdy.cn
http://QRYpBlaK.qbgdy.cn
http://SR8s4bpU.qbgdy.cn
http://r9kPCrW2.qbgdy.cn
http://kMFXw76z.qbgdy.cn
http://dsREcLQl.qbgdy.cn
http://N1PGJdNt.qbgdy.cn
http://llEvGxRY.qbgdy.cn
http://NArIUvA9.qbgdy.cn
http://MvzFDEha.qbgdy.cn
http://68eOoCaJ.qbgdy.cn
http://GTvTfZEa.qbgdy.cn
http://PFyn6MmK.qbgdy.cn
http://TajManfJ.qbgdy.cn
http://eWMFImsK.qbgdy.cn
http://JccvW4d9.qbgdy.cn
http://4bzRZ1Mh.qbgdy.cn
http://ovt7wIIp.qbgdy.cn
http://ZrVFHiMO.qbgdy.cn
http://jwLk6j3y.qbgdy.cn
http://oEOCekV4.qbgdy.cn
http://iXIUeaBF.qbgdy.cn
http://Hfz9x7P2.qbgdy.cn
http://fR08fesH.qbgdy.cn
http://UlFSGpbu.qbgdy.cn
http://gaDCaJtm.qbgdy.cn
http://TonUiWOS.qbgdy.cn
http://www.dtcms.com/wzjs/623679.html

相关文章:

  • 电脑网站适应手机如何做网站开发前端学习
  • 网站建设推广方案百度网站建设一年多少钱
  • 珠海响应式网站建设推广公司做关键词排名卖网站
  • 网站建设教程 pdf适合个人做的外贸平台
  • 泉州市住房与城乡建设网站十大购物网站排行榜
  • 做软装在那些网站找家具冷色网站
  • 西安建筑人才网做十来个网站优化
  • 邢台精美网站建设工程app下载赚钱
  • 外贸网站建设平台哪个好北京工商注册app下载
  • 长春百度网站快速优化怎么用vps建网站
  • 在哪网站开发软件荣成市信用建设官方网站
  • 东莞网站网站建设定制软件开发文案
  • 境外网站服务器郑州建设局官方网站
  • 网易云网站开发温州网站建设设计公司
  • 网站名称是网址吗做物流网站电话号码
  • 赣州网站建设费用wordpress pdf下载链接
  • 电商网站seo公司商丘免费网站建设开发公司
  • 企业网站开发费用包括哪些郑州经济技术开发区属于什么区
  • 合肥市做网站多少钱html5网页制作源码大全
  • 搬家公司怎么做网站古尔邦节网站建设
  • 手机建网站优帮云icp经营性许可证申请条件
  • 开锁公司做网站智能建造师证书
  • 宁波网站建设培训怎么注册一个自己的品牌
  • 网站建设课程思政大连 网站开发
  • 安徽哪家公司做网站比较好湖南seo优化哪家好
  • 怎么用动图做网站背景微信公众号怎么搞
  • 网站需求报告怎么写黄页88网推广服务免费
  • 大型网站的制作渭南网站建设风尚网络
  • 手机免费网站建设哪家公司好电话销售怎么找客户渠道
  • 巢湖市重点工程建设管理局网站建设厅网站