| 
 | 
 
 
发表于 2021-12-30 10:20:56
 4667 浏览  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 
                } 
                ... ... 
        } 
 
 
 |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
	
登录或注册 
 |