GUI 가 플래시로 되어 있는 프로그램을 리눅스에서 제작하려고 합니다.

infantry의 이미지

현재 GUI 가 플래시로 되어 있고, 플래시를 제어 하는 메인 프로그램을 MFC 로 제작되어

사용하고 있습니다.

윈도우에서는 Shockwave 관련 ocx 를 이용하여 아주 편리(?)하게 플래시도 뛰우고 서로

통신(?) 및 제어도 하였는데요

이번에 리눅스로 포팅을 하려고 자료를 검색해 보니,

윈도우 처럼 플래시를 응용어플리케이션에 포함시켜 플레이, 통신(?), 제어 에 관련된

자료를 좀처럼 찾을수가 없었습니다. openSWF, libming, gameSWF, gnash 등 많은 것을

찾아 보았지만, 응용프로그램 제작에는 어떻게 하는지에 대해서 .. 도무지 알수가 없더군요

혹시. 윈도우 처럼.. 리눅스에서도 간단하게 플래시를 사용한 어플리케이션 제작을 할수

있는 방법 혹은 자료가 있는지 부탁드립니다. 감사합니다.

shint의 이미지

리눅스에서 제작하는게 궁금해서 알아봤습니다.
만약 Qt를 사용해서 제작하게 된다면.

http://www.qtcentre.org/archive/index.php/t-9767.html
QWebView를 사용하는 경우는 이벤트처리가 곤란할거 같고.

http://hi.baidu.com/14112359/blog/item/2bf7ab13588f35ddf7039eb5.html/cmtid/4ea44d81768d05d6bc3e1ed5
QAxWidget을 사용하는 방법이 가장 좋은거 같습니다.
아래 코드에서처럼. 이벤트처리 방식도 나오는걸 보면. 괜찮아 보입니다.

QAxWidget *flash = new QAxWidget(0,0);
flash->resize(500,300);
flash->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}"));
connect(flash,SIGNAL(FSCommand(QString,QString)),this,SLOT(flashAction(QString,QString))); //用于处理FLASH传来的字符串
flash->dynamicCall("LoadMovie(long,string)",0,"F:/qt/mypro/2.swf"); //调用方法
ui->wInfoShow->setPlainText(flash->dynamicCall("TotalFrames").toString());//获得属性
flash->dynamicCall("FrameNum",200);//设置属性
flash->show();

물론. 두 방법다 된다고 하더라도. 플래시 배경을 투명하게 하고. 드래그 하는등에 작업도 남아보입니다.
그리고.flashlite 같은게 있는걸로 아는데. 라이센스 비용을 줘야한다고 알고 있습니다.

그냥 저라면. 플래시의 장점을 살려서. 웹에서 서비스'하듯이 브라우저로 동작하게 만들겁니다.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

danskesb의 이미지

QAxWidget은 ActiveX 컨트롤을 사용하므로 윈도 전용입니다. 리눅스에서는 사용할 수 없습니다.

shint의 이미지

몰랐었네요. 감사합니다. ㅇ_ㅇ''

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

cleansugar의 이미지

Adobe Flex에 포함시킬 수는 없을까요?

참고 RIA: http://en.wikipedia.org/wiki/OpenLaszlo

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

infantry의 이미지

Hi.

I known how to use flash in my windows c++ application with ActiveX.

But what it the way to do it under linux?

---------------------------------------------------------------------

Under Linux, you'll need to load the Flash plugin using dlopen,

then use the plugin API (which the Flash plugin implements) to set up

and interact with Flash. If there's a simpler way, I'm not aware of it.

See also Chromium's Linux plugin notes for more on the plugin API.

플래시 플러그인을 dlopen으로 로드하고 플러그인 api를 이용하라고 적어

놓았는데요.. 하하하.. ㅠ.ㅠ... 솔직히 뭔말인지 모르겠습니다. ㅠ.ㅠ.

출처. http://stackoverflow.com/questions/4232844/c-flash-under-linux

shint의 이미지

중국분의 파스칼 답변
http://www.qtcn.org/bbs/read.php?tid=9838
http://www.rangelreale.com/dgtkflasher.pas

플러그인 설치 예제
http://multimedia.cx/diamondx/
http://topic.csdn.net/u/20090104/16/ee2ab4a4-eec9-42a3-8cd0-7c18a992dca9.html

이런게 있었네요. 마지막 링크'를 보시면 원하시는게 아닐까 생각됩니다.
빌드까지 성공해보려고했지만. 그게 잘 안되네요;;;;
빌드 성공하시면 어떻게 하는지 좀 알려주시면 감사감사;;;;;

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

infantry의 이미지

flasher 0.2 버젼을 다운을 받습니다.. http://www.beatniksoftware.com/blog/?p=52
libcurl 도 다운을 받습니다..http://curl.haxx.se/libcurl/

우선 libcurl 을 다음과 같이 빌드 합니다.
./configure
make
make install

flasher 0.2 도 그냥 make 해서 빌드 합니다.. 오호 잘되는 군요..
드뎌 실행 합니다...
그런데 에러가 나오는 군요.. libflashplayer.so 를 못 찾겠다고 합니다..
소스를 뒤져 봅니다..LoadFlashPlugin 에서 보니깐 path 틀리더군요.. 일단 고쳐봅니다..
그리고. 다시 make 오호 또 빌드 되는 군요
다시 단독으로 실행 오호 잘됩니다..
드디어 플래시 파일을 돌려 봅니다..

앗.. 죈장..

mylinux@mylinux-LENOVO3000-V100:~/TEST/flasher-0.2$ ./flasher gravity.swf
Using plugin: /usr/lib/flashplugin-installer/libflashplayer.so

(process:21941): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.26.0/gobject/gtype.c:2710: You forgot to call g_type_init()

(process:21941): GLib-CRITICAL **: g_once_init_leave: assertion `initialization_value != 0' failed

(process:21941): GLib-GObject-CRITICAL **: g_object_new: assertion `G_TYPE_IS_OBJECT (object_type)' failed
세그멘테이션 오류
mylinux@mylinux-LENOVO3000-V100:~/TEST/flasher-0.2$

요런 에러 나옵니다.. 아.. 길고..멀군요.. 첨부에 빌드된 파일을 올릴께용.. ㅋㅋ

파일명이 flasher.jpg 로 되어있는것을 그냥 flasher 로 바꿔야 해용~

댓글 첨부 파일: 
첨부파일 크기
Image icon flasher .jpg86.52 KB
shint의 이미지

http://kb2.adobe.com/cps/406/kb406791.html
여기서 다운받아서 해보세요.

http://www.beatniksoftware.com/blog/?p=52
참고 사이트

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

infantry의 이미지

우선 많은 도움을 주신 shint께 감사의 인사 전해 드립니다.. 꾸벅~

사이트내용을 찬찬히 읽어 보니, ligflashplayer.so의 버젼문제이길래 낼름 9버젼을

받아서 다시 실행 시켜 보았습니다..

그런데.. 또 다음과 같은 내용이 나오더 군요..

mylinux@mylinux-LENOVO3000-V100:~/TEST/flasher-0.2$ ./flasher gravity.swf
Using plugin: ./libflashplayer.so

(process:8528): Gtk-CRITICAL **: IA__gtk_clipboard_get_for_display: assertion `display != NULL' failed
Adobe Flash Player: gtk_clipboard_get(GDK_SELECTION_PRIMARY); failed. Trying to call gtk_init(0,0);
WARNING: Unhandled variable 15 for NPN_GetValue
WARNING: Unhandled variable 15 for NPN_GetValue
WARNING: Unhandled variable 14 for NPN_GetValue
Loading: gravity.swf
WARNING: Unhandled variable 15 for NPN_GetValue

그리고. 화면은 나오는데.. 그냥 하얀 화면만 표시가 됩니다.. 현재 사용하는 리눅스가 우분투10.10 인데요..

배포판문제? .. 그런데. firefox 에서 파일열기에서 플래시파일을 열면 아주 잘됩니다. ㅎㅎㅎ

제가 뭘 잘못한건가요?..

shint의 이미지

하얀 화면만 나오더라구요.
저번에 제가 빌드 실패한거랑 해서. 시간날때 한번 해볼려구요.
천천히 하져머;;;; 이것저것 재미난거 많던데요.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

infantry의 이미지

설연휴 기간 엄청난 삽질을 하였습니다..

결국.. lazarus에서 mozilla plugin panel 이라는 컴포넌트를 사용해서 플래쉬를 돌려 봤는데용

아무래도.. 모자란 감이 많더군요.. (윈도용이나. 리눅용이나..)

같은 플러그인을 사용해도. 컴포넌트를 이용해서 플레이 하면 않나오고..

FireFox 를 뛰운상태에서 플레이 하면. 잘나오고.. 아무래도. 컴포넌트 문제인것 같은데요..

도대체 FireFox에서는 플러그인을 어떻게 사용하는 걸까요?

그것만 알수 있으면.. 아~~~~...

Yi Soo An@Google의 이미지

디버깅 결과만 적을께요.

libflashplugin.so 는 https://get.adobe.com/kr/flashplayer/otherversions/ 가셔서 linux 선택하시고 tar.gz 으로 받으시면 안에 최신 플러그인이 있습니다. 이걸 $HOME/.mozilla/plugins에 넣어주시면 플러그인 문제는 해결이 되구요.

후에 test.swf를 실행해보니, WARNING: Unhandled variable 14 for NPN_GetValue 이 출력되는데 flasher.c 코드의 NPN_GetValue로 가보면 파라미터의 variable 값에 따라 브랜치되고 있습니다. 제 환경에서는 실행하면 variable에 NPNVSupportsXEmbedBool이 설정되는데 mozilla의 레퍼런스를 봐도 해당 variable의 값이 무엇인지 모르겠네요. 레퍼런스는 여기입니다. https://developer.mozilla.org/en-US/docs/Archive/Plugins/Reference/NPN_GetValue

그리고 더 찾아보니 flasher에 submodule로 들어가 있는 npapi는 버전이 0.14인데 모질라 npapi-sdk는 0.29버전이라 많이 달라졌을거 같아요. npapi-sdk는 https://code.google.com/archive/p/npapi-sdk/ 여기입니다.

vlc-npapi 구현을 참고삼아 따로 개발하셔야 될 것 같습니다. https://code.videolan.org/videolan/npapi-vlc/blob/master/npapi/npcontrol/npcommon.cpp

---------------
Happy Hacking!