ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – ExoPlayer不在使用FFMPEG的设备上播放音频

2019-05-28 17:13:05  阅读:136  来源: 互联网

标签:android exoplayer


我已经设置了ExoPlayer来传输音频,它在我拥有的某些设备(例如,我的Nexus 5)上运行得非常漂亮,但在其他设备上它根本不会播放任何内容.

为了消除我的应用程序的任何问题,我已经修改了演示应用程序,将“Dizzy”视频更改为随机MP3我已经坐在服务器上.在DefaultRendererBuilder中,我还返回一个空的视频轨道渲染器,我只是尝试播放音频.

显然每个设备都有自己的一组编解码器,所以我怀疑可能是错误的设备被加载和破坏.我在ExoPlayer源代码中看到了几点,其中解码器是从MIME类型确定的,我想我已经将它缩小到了prepare方法中FrameworkSampleSource中的一行.

一旦调用了setDataSource,在我正在使用的华为Mate 7设备上,一切都会破裂.看起来MediaExtractor使用FFMPEG来提取数据,这似乎不兼容.我测试过的其他设备似乎没有这样做.这是LogCat的转储

11-13 16:30:45.600 30793-30793/com.google.android.exoplayer.demo I/ExoPlayerImpl﹕ Init 1.0.13
11-13 16:30:45.605 30793-30881/com.google.android.exoplayer.demo I/﹕ uri = http://this-is-my-server.com/public/mime-test.mp3
11-13 16:30:45.605 30793-30881/com.google.android.exoplayer.demo I/﹕ after judge whether is youtube , isWidevine = 0
11-13 16:30:45.605 30793-30881/com.google.android.exoplayer.demo I/FFMPEGExtractor﹕ FFMPEGExractor opened file is [http://this-is-my-server.com/public/mime-test.mp3]
11-13 16:30:45.790 30793-30881/com.google.android.exoplayer.demo E/FFMPEGExtractor﹕ Can not find video stream!
11-13 16:30:45.790 30793-30881/com.google.android.exoplayer.demo E/FFMPEGExtractorUtils﹕ Couldn't find MIME by codec id 86017 !
11-13 16:30:45.790 30793-30881/com.google.android.exoplayer.demo I/FFMPEGExtractor﹕ Unknown MIME,try using ffmpegaudiodecorder to decode
11-13 16:30:45.790 30793-30881/com.google.android.exoplayer.demo I/FFMPEGExtractor﹕ setAudioMeta MIME = audio/ffmpeg
11-13 16:30:45.790 30793-30881/com.google.android.exoplayer.demo I/FFMPEGExtractor﹕ audio/ffmpeg set kKeyFFmpegCodecID,codec->codec_id =     86017
11-13 16:30:45.790 30793-30881/com.google.android.exoplayer.demo I/FFMPEGExtractorUtils﹕ Audio:
11-13 16:30:45.790 30793-30881/com.google.android.exoplayer.demo I/FFMPEGExtractorUtils﹕ {
11-13 16:30:45.790 30793-30881/com.google.android.exoplayer.demo I/FFMPEGExtractorUtils﹕ kKeyMIMEType = 
11-13 16:30:45.790 30793-30881/com.google.android.exoplayer.demo I/FFMPEGExtractorUtils﹕ kKeyDuration = [00:01:43.42]
11-13 16:30:45.790 30793-30881/com.google.android.exoplayer.demo I/FFMPEGExtractorUtils﹕ kKeyBitRate = [128000 bps]
11-13 16:30:45.790 30793-30881/com.google.android.exoplayer.demo I/FFMPEGExtractorUtils﹕ kKeyChannelCount = [1]
11-13 16:30:45.790 30793-30881/com.google.android.exoplayer.demo I/FFMPEGExtractorUtils﹕ kKeySampleRate = [44100 bps]
11-13 16:30:45.790 30793-30881/com.google.android.exoplayer.demo I/FFMPEGExtractorUtils﹕ }
11-13 16:30:45.790 30793-30883/com.google.android.exoplayer.demo I/OMXClient﹕ Using client-side OMX mux.
11-13 16:30:45.795 30793-30883/com.google.android.exoplayer.demo I/MediaCodec﹕ Found 0 pieces of codec specific data.
11-13 16:30:45.795 30793-30883/com.google.android.exoplayer.demo I/ACodec﹕ allocateBuffersOnPort,isHevc = 0
11-13 16:30:45.795 30793-30883/com.google.android.exoplayer.demo I/ACodec﹕ allocateBuffersOnPort,isHevc = 0
11-13 16:30:47.210 30793-30881/com.google.android.exoplayer.demo W/FFMPEGExtractor﹕ retry to read pakcet
11-13 16:30:47.210 30793-30881/com.google.android.exoplayer.demo W/FFMPEGExtractor﹕ retry to read pakcet
11-13 16:30:47.210 30793-30881/com.google.android.exoplayer.demo W/FFMPEGExtractor﹕ retry to read pakcet
11-13 16:30:47.210 30793-30881/com.google.android.exoplayer.demo W/FFMPEGExtractor﹕ retry to read pakcet
11-13 16:30:47.210 30793-30881/com.google.android.exoplayer.demo E/FFMPEGExtractor﹕ Reaching the end of file! streamId : 0

如您所见,它似乎无法正确检测MIME类型.如果我传入EXACT SAME文件是磁盘上的本地版本,它会播放得很好,如果它在服务器上则不行. FFMPEG似乎不了解MIME是什么,只是使用自己的bastardised“audio / ffmeg”mime.它似乎得到持续时间等,但只是无法播放文件.

如果我在ExoPlayer上设置一个监听器,我可以看到它在每个状态中移动 – 准备,缓冲,但从未准备好.它将从’缓冲’转变为’结束’.

虽然我不确定这是一个特定于ExoPlayer的问题,但肯定有人必须遇到类似的问题吗?这是一个非常基本的用例 – 只需使用线路播放MP3 –

SampleSource sampleSource = new FrameworkSampleSource(context, uri, headers, RENDERER_COUNT);
audioTrackRenderer = new MediaCodecAudioTrackRenderer(sampleSource, null, true);

没有什么太令人兴奋的了.我究竟做错了什么?我该怎么做才能解决这个问题?我甚至传入了“Content-Type”:“audio / mpeg”作为标题,它什么也没做.

解决方法:

Exoplayer现在有一个应用程序级媒体提取器(目前在开发分支上),完全避免了这个问题,因为它没有通过Android的破坏的MediaExtractor运行.

查看演示应用程序的PlayerActivity和ExtractorRendererBuilder,了解如何使用它.

标签:android,exoplayer
来源: https://codeday.me/bug/20190528/1172281.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有