안드로이드에 새로운 플레이어 붙이는 방법 Add new player on Android
안드로이드에 새로운 플레이어를 추가하기 위해서 수정해야 할 부분
frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp
에 보면 아래와 같은 코드가 있습니다.
786 static sp<MediaPlayerBase> createPlayer(player_type playerType, void* cookie,
787 notify_callback_f notifyFunc)
788 {
789 sp<MediaPlayerBase> p;
790 switch (playerType) {
791 #ifndef NO_OPENCORE
792 LOGE(" IN PVPlayer");
793 case PV_PLAYER:
794 LOGE(" create PVPlayer");
795 p = new PVPlayer();
796 break;
797 #endif
798 case SONIVOX_PLAYER:
799 LOGV(" create MidiFile");
800 p = new MidiFile();
801 break;
802 case VORBIS_PLAYER:
803 LOGV(" create VorbisPlayer");
804 p = new VorbisPlayer();
805 break;
806 #if BUILD_WITH_FULL_STAGEFRIGHT
807 LOGE(" IN StagefrightPlayer");
808 case STAGEFRIGHT_PLAYER:
809 LOGE(" create StagefrightPlayer");
810 p = new StagefrightPlayer;
811 break;
812 #endif
813 case TEST_PLAYER:
814 LOGV("Create Test Player stub");
815 p = new TestPlayerStub();
816 break;
817 }
818 if (p != NULL) {
819 if (p->initCheck() == NO_ERROR) {
820 p->setNotifyCallback(cookie, notifyFunc);
821 } else {
822 p.clear();
823 }
824 }
825 if (p == NULL) {
826 LOGE("Failed to create player object");
827 }
828 return p;
829 }
위와 같이 선택된 플레이어를 생성할 수 있는 것을 볼 수 있는데
이부분에 새로운 플레이어를 생성할 수 있도록 추가해주면 됩니다.
createPlayer 에 들어오는 playerType 은 getPlayerType 이라는 함수에서 처리하게 되는데 이쪽을 보면
742 player_type getPlayerType(const char* url)
743 {
744 if (TestPlayerStub::canBeUsed(url)) {
745 return TEST_PLAYER;
746 }
747
748 bool useStagefrightForHTTP = false;
749 char value[PROPERTY_VALUE_MAX];
750 if (property_get("media.stagefright.enable-http", value, NULL)
751 && (!strcmp(value, "1") || !strcasecmp(value, "true"))) {
752 useStagefrightForHTTP = true;
753 }
754
755 // use MidiFile for MIDI extensions
756 int lenURL = strlen(url);
757 for (int i = 0; i < NELEM(FILE_EXTS); ++i) {
758 int len = strlen(FILE_EXTS[i].extension);
759 int start = lenURL - len;
760 if (start > 0) {
761 if (!strncmp(url + start, FILE_EXTS[i].extension, len)) {
762 if (FILE_EXTS[i].playertype == VORBIS_PLAYER
763 && !strncasecmp(url, "http://", 7)
764 && useStagefrightForHTTP) {
765 return STAGEFRIGHT_PLAYER;
766 }
767 return OverrideStagefrightForVorbis(FILE_EXTS[i].playertype);
768 }
769 }
770 }
771
772 if (!strncasecmp(url, "http://", 7)) {
773 if (!useStagefrightForHTTP) {
774 return PV_PLAYER;
775 }
776 }
777
778 // Use PV_PLAYER for rtsp for now
779 if (!strncasecmp(url, "rtsp://", 7)) {
780 return PV_PLAYER;
781 }
782
783 return getDefaultPlayerType();
784 }
위와 같이 들어오는 url 을 비교해서 플레이어를 지정해 주게 됩니다.
따라서 우리도 위와 같이 새로운 URL 을 지정하여 재생을 시도하면
우리가 만든 플레이어로 동작하도록 할 수 있습니다.
'Android' 카테고리의 다른 글
안드로이드 슬립모드 안들어가게 하기 sleep suspend (1) | 2010.10.28 |
---|---|
OpenCORE Nodes 의 운용 순서. -_-;; 젝일! (0) | 2010.09.16 |
android SD CARD 외장 스토리지로 인식. (0) | 2010.09.03 |