android播放器怎么调用硬解

时间:2023-01-31 21:29:43
我想在播放器里直接调用硬解解码,对底层不是很熟悉,大概了解了下OMX之类的东西,但是还是不知道应该怎么做才能直接调用硬件解码,不知道是否能够直接通过java层调用,还望大神指点一二

15 个解决方案

#1


好像不行吧,这个由底层决定的.java层估计不能决定

#2


引用 楼主 lucherr 的回复:
我想在播放器里直接调用硬解解码,对底层不是很熟悉,大概了解了下OMX之类的东西,但是还是不知道应该怎么做才能直接调用硬件解码,不知道是否能够直接通过java层调用,还望大神指点一二

谢谢你的回复,那如果我想通过设置解码的方式为硬解,然后通过jni直接调用底层修改解码的方式为硬解是否可行呢?
就像mxplayer那样,不知道该从哪儿入手

#3


我觉得第三方的播放器 所谓调用硬解 就是调用系统的mediaplayer,而软解 就是调用自己实现的player,基于ffmpeg的。native有所谓的prefer,就是有软解和硬解存在的时候,优先调用perfer

#4


谢谢您的回复,我想问问调用系统的mediaplayer是指调用awesomeplayer之类的吗?需要直接通过jni调用?ffmpeg是属于软解吗?对于我要实现的这个功能,不知道您有没有什么方案,我看了mx player和rock plyer里面都有切换硬解和软解的功能,不知道具体是怎么实现的,我看到rock player有用到ffmpeg,但具体原理不懂,希望指点下

#5


引用 3 楼 shcalm 的回复:
我觉得第三方的播放器 所谓调用硬解 就是调用系统的mediaplayer,而软解 就是调用自己实现的player,基于ffmpeg的。native有所谓的prefer,就是有软解和硬解存在的时候,优先调用perfer

谢谢您的回复,我想问问调用系统的mediaplayer是指调用awesomeplayer之类的吗?需要直接通过jni调用?ffmpeg是属于软解吗?对于我要实现的这个功能,不知道您有没有什么方案,我看了mx player和rock plyer里面都有切换硬解和软解的功能,不知道具体是怎么实现的,我看到rock player有用到ffmpeg,但具体原理不懂,希望指点下

#6


我觉得硬解 你就调用mediaplayer就行了,因为硬解只能这么办,软解的话 如果你需要增加格式支持,就需要移植ffmpeg了

#7


引用 6 楼 shcalm 的回复:
我觉得硬解 你就调用mediaplayer就行了,因为硬解只能这么办,软解的话 如果你需要增加格式支持,就需要移植ffmpeg了

哦哦,您的意思是直接调用java层的mediaplayer?它默认会先找硬解吗?硬解支持的格式是不是得由厂家提供的libstagefrighthw.so来决定?

#8


格式只是container,看硬解还是软解 看的是编码格式 H263,H264之类的跟container没啥关系。具体平台framework里面写死的

#9


引用 8 楼 shcalm 的回复:
格式只是container,看硬解还是软解 看的是编码格式 H263,H264之类的跟container没啥关系。具体平台framework里面写死的

哦哦,清晰很多了!您看看我现在的一个理解对不对:调用java层的mediaplayer进行播放的时候,会默认调用硬解,如果设备不支持就会调用系统的软解,如果想定制解码器,可以自己写相应的解码器,或者引入ffmpeg之类的解码库实现,望指点

#10


学习了 android播放器怎么调用硬解

#11


引用 9 楼 lucherr 的回复:
Quote: 引用 8 楼 shcalm 的回复:

格式只是container,看硬解还是软解 看的是编码格式 H263,H264之类的跟container没啥关系。具体平台framework里面写死的

哦哦,清晰很多了!您看看我现在的一个理解对不对:调用java层的mediaplayer进行播放的时候,会默认调用硬解,如果设备不支持就会调用系统的软解,如果想定制解码器,可以自己写相应的解码器,或者引入ffmpeg之类的解码库实现,望指点

系统针对某种解码格式有对应的硬解或者软解实现,会在注册的map里面找。想要 扩展解码器 如果不是厂商,一般都是引入ffmpeg。目前市面的基本都是

#12


引用 11 楼 shcalm 的回复:
系统针对某种解码格式有对应的硬解或者软解实现,会在注册的map里面找。想要 扩展解码器 如果不是厂商,一般都是引入ffmpeg。目前市面的基本都是

哦哦,谢谢您的指导,我现在清晰很多了,再次感谢

#13


我也清晰了很多

#14


略有收获,感谢

#15


如果现在要写一个自己的播放器,硬解在native c层没有的api?比如知道支持哪些格式硬解的api?
三楼说的mediaplayer是指stagefright/awesomeplayer还是java层开放的mediaplayer?硬解相对于软解的优势,可以降低cpu占用率,而且在硬件层的效率肯定比代码层高。
如果指的是java层开放的mediaPlayer,那开发播放器的话如果想用硬解,依照三楼朋友的说法,是完全直接用mediaPlayer进行播放?但Android的mediaplayer实际上对HLS支持的非常差,容错的能力基本为零(也是自己要写播放器的原因之一)。

#1


好像不行吧,这个由底层决定的.java层估计不能决定

#2


引用 楼主 lucherr 的回复:
我想在播放器里直接调用硬解解码,对底层不是很熟悉,大概了解了下OMX之类的东西,但是还是不知道应该怎么做才能直接调用硬件解码,不知道是否能够直接通过java层调用,还望大神指点一二

谢谢你的回复,那如果我想通过设置解码的方式为硬解,然后通过jni直接调用底层修改解码的方式为硬解是否可行呢?
就像mxplayer那样,不知道该从哪儿入手

#3


我觉得第三方的播放器 所谓调用硬解 就是调用系统的mediaplayer,而软解 就是调用自己实现的player,基于ffmpeg的。native有所谓的prefer,就是有软解和硬解存在的时候,优先调用perfer

#4


谢谢您的回复,我想问问调用系统的mediaplayer是指调用awesomeplayer之类的吗?需要直接通过jni调用?ffmpeg是属于软解吗?对于我要实现的这个功能,不知道您有没有什么方案,我看了mx player和rock plyer里面都有切换硬解和软解的功能,不知道具体是怎么实现的,我看到rock player有用到ffmpeg,但具体原理不懂,希望指点下

#5


引用 3 楼 shcalm 的回复:
我觉得第三方的播放器 所谓调用硬解 就是调用系统的mediaplayer,而软解 就是调用自己实现的player,基于ffmpeg的。native有所谓的prefer,就是有软解和硬解存在的时候,优先调用perfer

谢谢您的回复,我想问问调用系统的mediaplayer是指调用awesomeplayer之类的吗?需要直接通过jni调用?ffmpeg是属于软解吗?对于我要实现的这个功能,不知道您有没有什么方案,我看了mx player和rock plyer里面都有切换硬解和软解的功能,不知道具体是怎么实现的,我看到rock player有用到ffmpeg,但具体原理不懂,希望指点下

#6


我觉得硬解 你就调用mediaplayer就行了,因为硬解只能这么办,软解的话 如果你需要增加格式支持,就需要移植ffmpeg了

#7


引用 6 楼 shcalm 的回复:
我觉得硬解 你就调用mediaplayer就行了,因为硬解只能这么办,软解的话 如果你需要增加格式支持,就需要移植ffmpeg了

哦哦,您的意思是直接调用java层的mediaplayer?它默认会先找硬解吗?硬解支持的格式是不是得由厂家提供的libstagefrighthw.so来决定?

#8


格式只是container,看硬解还是软解 看的是编码格式 H263,H264之类的跟container没啥关系。具体平台framework里面写死的

#9


引用 8 楼 shcalm 的回复:
格式只是container,看硬解还是软解 看的是编码格式 H263,H264之类的跟container没啥关系。具体平台framework里面写死的

哦哦,清晰很多了!您看看我现在的一个理解对不对:调用java层的mediaplayer进行播放的时候,会默认调用硬解,如果设备不支持就会调用系统的软解,如果想定制解码器,可以自己写相应的解码器,或者引入ffmpeg之类的解码库实现,望指点

#10


学习了 android播放器怎么调用硬解

#11


引用 9 楼 lucherr 的回复:
Quote: 引用 8 楼 shcalm 的回复:

格式只是container,看硬解还是软解 看的是编码格式 H263,H264之类的跟container没啥关系。具体平台framework里面写死的

哦哦,清晰很多了!您看看我现在的一个理解对不对:调用java层的mediaplayer进行播放的时候,会默认调用硬解,如果设备不支持就会调用系统的软解,如果想定制解码器,可以自己写相应的解码器,或者引入ffmpeg之类的解码库实现,望指点

系统针对某种解码格式有对应的硬解或者软解实现,会在注册的map里面找。想要 扩展解码器 如果不是厂商,一般都是引入ffmpeg。目前市面的基本都是

#12


引用 11 楼 shcalm 的回复:
系统针对某种解码格式有对应的硬解或者软解实现,会在注册的map里面找。想要 扩展解码器 如果不是厂商,一般都是引入ffmpeg。目前市面的基本都是

哦哦,谢谢您的指导,我现在清晰很多了,再次感谢

#13


我也清晰了很多

#14


略有收获,感谢

#15


如果现在要写一个自己的播放器,硬解在native c层没有的api?比如知道支持哪些格式硬解的api?
三楼说的mediaplayer是指stagefright/awesomeplayer还是java层开放的mediaplayer?硬解相对于软解的优势,可以降低cpu占用率,而且在硬件层的效率肯定比代码层高。
如果指的是java层开放的mediaPlayer,那开发播放器的话如果想用硬解,依照三楼朋友的说法,是完全直接用mediaPlayer进行播放?但Android的mediaplayer实际上对HLS支持的非常差,容错的能力基本为零(也是自己要写播放器的原因之一)。