搜索

6

主题

6

帖子

124

积分

注册会员

Rank: 2

积分
124
发表于 2021-12-30 10:20:56 3236 浏览 0 回复

RK平台播放框架切换

从5.1以后的sdk,rk平台上面可以同时支持ffmpeg以及stagefright(简称sf);
推荐使用ffmpeg

修改办法:
frameworks/av/media/libmediaplayerservice/Android.mk

    BUILD_FF_PALYER := true  ---设置为true时表示是ffmpeg框架

    BUILD_FF_PALYER := false ---设置为flase时表示是sf框架

修改完这个宏以后需要用如下的命令编译:
    mmm frameworks/av/media/libmediaplayerservice -B

编译接受后将编译好的libmediaplayerservice.so push到机器的system/lib下重启机器后再播放视频验证即可:


如果播放视频时候输出的log是:
   D/RockFFPlayer(  150): enqueueMessage:sync wait ok
D/RockFFPlayer(  150): prepareAsync in
D/RockFFPlayerBase(  150): dumpStatus(): Initialized
D/RockFFPlayerBase(  150): dumpStatus(): Preparing
I/FFPlayer_Version(  150): rk30 board found in board property
I/FFPlayer_Version(  150): ******************************************
I/FFPlayer_Version(  150):
I/FFPlayer_Version(  150): starting main player: v2.0 2016-07-25:50:26.757499a3.fan
I/FFPlayer_Version(  150): ffPlayer is Built for BOARD_RK3288
I/FFPlayer_Version(  150):
    关键字RockFFPlayer 或者ffPlayer is Built for 表示当前是ffmpeg框架


如果播放视频的时候 是:
输出AwesomePlayer::AwesomePlayer()in 则表示是sf框架;

如果修改后还是不生效,请仔细阅读文档,并检查自己的编译步骤,以及push的so是否正确;


注意:
不建议修改默认框架,毕竟ffmpeg要比sf框架适用范围广泛,但是如果通过框架切换可以解决问题,那么
可以使用下面的方法去修改;指定符合某些条件的才去切换
frameworks\av\media\libmediaplayerservice\MediaPlayerFactory.cpp

        player_type MediaPlayerFactory::getPlayerType(const sp<IMediaPlayer>& client,const char* url)
        {
                if(!strcmp(sCallingProcessName.c_str(),"android.media.cts") ||
                           !strcmp(sCallingProcessName.c_str(),"android.mediastress.cts") ||
                           !strcmp(sCallingProcessName.c_str(),"android.security.cts"))
                        return NU_PLAYER;----6.0以后的sdk返回这个,如果是5.1返回的是STAGEFRIGHT_PLAYER
                ... ...
        }
    或者是
        player_type MediaPlayerFactory::getPlayerType(const sp<IMediaPlayer>& client,int fd,int64_t offset,int64_t length)
        {
                #ifdef USE_FFPLAYER
                String8 filePath;
                getFileName(fd,&filePath);

                if(strstr(filePath.string(),".ogg")){----表示ogg格式的文件调用sf框架的播放器
                        return NU_PLAYER;----6.0以后的sdk返回这个,如果是5.1返回的是STAGEFRIGHT_PLAYER
                }
                ... ...
        }


回复

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


登录或注册
快速回复 返回顶部 返回列表