前两天周末的时候,开发群里,有领导反应有一个视频,安卓手机只有声音,没有画面,领导让我找一下原因,首先我肯定要看一下这个视频本身是不是有问题的,我下载下来后,是可以正常播放的,而且h5和ios都可以正常播放,只有我们安卓的手机播放的时候只有声音没有画面,然后猜测是我们安卓的播放器的问题,可能是我们的播放器不支持这种视频格式,然后把下载下来的视频,使用ffmpeg命令ffprobe -i /Users/guo/Downloads/o_1d1nugr55kn8136m1e4juok4gk8.mp4查看了视频源的信息,发现是mpeg4协议的视频,然后我拿正常的可以播放的视频下载下来后,使用命令查看视频信息,发现是h264协议的视频,很明显了,是我们的播放器播放mpeg4协议的视频有问题,但是我们用的是ijkplayer,为什么不支持这种协议的,不是说ijkplayer只是的视频格式很多吗。

接着就是去ijkplayer的github的issues上查找原因,原来ijkplayer默认的so是不支持mpeg4的视频的,在我们这里,mpeg4是视频原片,h264是转码后的视频,我们是使用别人家的第三方直播平台,通过他们平台的转码拿到h264的视频的,也就是说这个有问题的视频是转码失败的视频,也就是视频原片,既然第三方平台转码不了,只能我们客户端做处理了,先看一下ijkplayer使用的so

dependencies {# required, enough for most devices.compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'# Other ABIs: optionalcompile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'# ExoPlayer as IMediaPlayer: optional, experimentalcompile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
}

这是默认的so,在gradle中添加依赖就可以了,但是如果想要你的ijkplayer支持更多协议的视频,需要你自己去编译打so,怎么去打支持更多协议的so,github上都已经给出了方法:

If you prefer more codec/format
cd config
rm module.sh
ln -s module-default.sh module.sh
cd android/contrib
If you prefer less codec/format for smaller binary size (include hevc function)
cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
cd android/contrib
If you prefer less codec/format for smaller binary size (by default)
cd config
rm module.sh
ln -s module-lite.sh module.sh
cd android/contrib

如果你需要支持更多的codec/format,可以选择第一种,不知道默认的ijkplayer的so是用的哪一种编译的。但是我们可能需要的不是那么多的解码器,如果全部都打的话,so会很大,所有我们可以使用最后一种编译so的方式,但要加入mpeg4的支持,打开config下面的module-lite.sh,在#./configure --list-decoders末尾加入下面一行:

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mpeg4"就可以啦,这样编译的so就很小了,而且还支持mpeg4.

如果不想自己编译,比较懒,也可以使用别人编译好的,implementation 'com.shuyu:gsyVideoPlayer-ex_so:6.0.3',这里编译的so就支持更多的视频协议格式,如果想知道怎么编译的,也可以去看https://github.com/CarGuo/GSYVideoPlayer/blob/master/module-lite-more.sh,或者用这个脚本自己编译。

这样ijkplayer就可以播放mpeg4协议的视频了,测试通过,原来有问题的只有声音没有画面的视频可以正常播放了。

第二个问题是有一个视频播放很卡很卡,其他视频正常,这个很卡的视频,ios,h5都是正常的,先找原因,还是用ffmpeg命令查看视频的信息,然后和正常播放的视频的信息做对比,然后就发现这个视频的信息里,audio在前,video在后,其他能正常播放的视频的信息都是video在前,audio在后,然后我就先把视频的音频去掉,看看会有什么效果,结果发现一点都不卡了,肯定是音频导致的,或者说音频视频编码的时候,出了什么问题导致的,但是把音频去掉肯定不行,不能让别人只看视频不听声音啊,之前那个视频播放有声音没画面是因为当时的播放器不支持mpeg4,但是这个视频的格式是h264,不是mpeg4,说明不是同样的问题了,而且这个视频是第三方视频平台转码后的,猜测是转码后的视频音频出了问题,然后我就把这个有问题的视频下载下来通过本地ffmpeg的命令ffmpeg -i /Users/guoliuya/Downloads/o_1d514e1rn1jm524f1ejtg631r4g8.mp4 -vcodec libx264 -preset medium -b:v 2000k /Users/guoliuya/Downloads/o_1d514e1rn1jm524f1ejtg631r4g99.mp4,转码后得到的视频,再次播放就正常了,然后查看视频的信息发现转码后的视频信息audio ,video的位置正常了,video在前,audio在后了,然后把这个转码后的视频,交给后台,让他上传到服务器,问题就解决了,很卡的那个视频不卡了。

先记录一下这两个问题,以后有关于视频播放的问题再更新。

Android ijkplayer视频播放 有声音没画面或者很卡(不同的视频源,原因也不同,我只记录一下我们项目遇到的)相关推荐

  1. 优酷进度条不能拖动_优酷画面一直加载中,有声音没画面,拖动进度条无效怎么办...

    优酷画面一直加载中,有声音没画面,拖动进度条无效: 1.建议用户检查网络稳定性,如果是超清视频,尝试切换成高清或标清模式进行视频观看. 2.暂停其它的下载活动, 如: BT下载.其它P2P软件的数据交 ...

  2. 【Springboot + Vue 视频播放web项目】解决视频播放只有声音没有画面

    问题描述: 使用vue-video-player作为视频播放插件,捣鼓挺久de了一堆bug之后终于能读取本地MP4视频文件,但是只有声音没有画面 前端也是能够正确地根据url找到文件,音频也是正确的 ...

  3. videoview 有声音没画面的可能原因

    这个问题查了很久最后终于解决了 --原因就是 videoview的父类如果被 setDrawingCacheEnabled(true) 就会造成videoview 播放的时候只有声音没有画面. 解决方 ...

  4. qt qmediaplayer有声音没画面_小科普 | 一招,让麦克风声音更出色!

    平常玩游戏开黑,我们必然会用到麦克风交流,但是很多人的麦克风比较普通,收声效果较差.还伴随着明显的底噪"沙沙声".玩游戏的时候风扇呼啦啦的.冬天夏天空调风扇也不停,那开黑连麦效果真 ...

  5. 萤石android播放成功没画面,Android-再次解读萤石云视频

    前言 我之前写过一篇萤石云的集成文章,很多人问我有没有demo, 今天我再次总结一下, 并加个些功能. 集成步骤 视频预览播放 视频放大缩小 视频的质量切换 截图 视频加载细节 之前的文章大家可以看下 ...

  6. ubuntu 播放视频黑屏,没声音没画面,无法播放视频怎么办--已解决

    我的系统是新装的,出现了这个问题,下面是转发内容,解决了我的问题: . SMPlayer 是免费开源的媒体播放器,内置的解码器,在Linux和Windows下几乎可以播放所有的视频和音频格式.它不需要 ...

  7. KMPlayer 播放视频有声音没画面

    我的环境: Windwos 7 32bit ATI 545V KMPlayer 版本 3.8.0.121 打开软件->右键->视频(高级)->视频你渲染器->旧的视频渲染器 我 ...

  8. m3u8流文件在html视频播放器中播放有声音无画面问题

    m3u8流文件在html视频播放器中播放有声音无画面问题 前言 最近在做一个海康视频设备直接在网页上播放的功能,由于现在浏览器不支持flash等插件,所以想着将海康的rtsp流先转化为hls流再使用h ...

  9. Android播放视频或视频通话只有声音没有画面解决方法,布局刷新失败解决办法

    Android播放视频或视频通话只有声音没有画面这个问题困扰我好几天,原因竟然是因为Mainfest.xml里的一个属性:hardwareAccelerated android:hardwareAcc ...

最新文章

  1. Spark在集群中的安装
  2. SpringBoot常见功能特性分析
  3. 常数中有换行符的错误
  4. 一个很奇怪的css#behavior#saveHistory
  5. 跨浏览器确定一个窗口的大小
  6. Android中的EditText默认时不弹出软键盘的方法
  7. easymock_EasyMock注释– JUnit 4
  8. 前后端分离项目如何部署_不用Docker前后端分离项目如何快速部署
  9. 交友小程序服务器,又是陌生人交友小程序,探探Lite到底有什么不同?
  10. mysql 读写分离_详解MySQL读写分离
  11. 手机连接Wi-Fi不能上网之DNS异常
  12. 频数直方图的步骤_超级详细的直方图应用步骤及分析,一篇搞定直方图!
  13. C++实现走迷宫算法(1)
  14. 路由器WiFi密码更改及隐藏操作
  15. 微信被误封号怎么办?详解微信封号的底层逻辑
  16. 深入理解地址翻译 CSAPP
  17. 【学习笔记之程序员】笔记
  18. Sentinel-2(哨兵-2)L1C数据辐亮度(辐射定标)和TOA反射率的获取说明
  19. 采购中心如何高效管理供应商的质量?
  20. 开发利器IntelliJ IDEA—带你体验各种神奇操作

热门文章

  1. 技术指标验证试验之KDJ
  2. 用Python开发截图识别OCR小工具
  3. TensorRT初探——MobileNet_V1
  4. 100个最权威的招聘面试题及回答解析 (五)
  5. Flutter 调用地图软件(高德、百度、腾讯、苹果)
  6. [游戏]求生之路会用到的命令
  7. HTTP协议,HTTPS协议,SSL/TLS协议概述
  8. 【RNN数据预测】基于matlab时间反向传播 (BPTT) 训练RNN递归神经网络预测【含Matlab源码 2434期】
  9. redis删除策略和逐出策略
  10. FFmpeg怎么区分识别视频是逐行扫描还是隔行扫描