FireMonkey - FFMpeg Player 절반의 성공

Programming/Delphi - FireMonkey 2013.11.05 23:55 Posted by 파란크리스마스

출처 : FMXTCanvasDrawFunctions (Delphi)
Fastest way to draw pixels in FireMonkey
Firemonkey Rotate Text
Delphi XE4 FireMonkey/iOS DrawBitmap not working
FIREMONKEY에서 썸네일을 만들려면 (1)
[FMX,VCL 비교] #1 VCL의 Canvas와 FMX의 Canvas 차이
[FM] TCanvasGdiPlus 문제점

FireMonkey - FFMpeg Player

ffmpeg 컴파일 하여 Delphi FireMonkey를 이용해서 Android와 IOS용 Player를 만들어 보았습니다.

처음 XE5가 나오고 일주일 정도 예상했는데, 한달이나 걸렸네요.

처음에는 소스를 공개 할 생각으로 작업했는데, 이것 때문에 너무 고생하다보니, 나중에 강좌를 통해서
강좌를 듣는 분들에게 제공 하도록 하겠습니다.

Android용 Player를 만들어 본적이 있어, JNI 방식으로 Player로 시작했는데,
Delphi는 GCC과 같은 방식으로 호출하는 것이라 JNI 인터페이스로 구현 할 필요가 없더군요.

apk에 정적 라이브러리(static library - .so)를 같이 배포해서 동적로딩 하려고 했었는데,
절대 경로로 로딩은 되는데, apk에 존재하는 정적 라이브러리는 로딩안되더군요.

지금까지 결론은 안드로이드나 IOS는 공유 라이브러리(Shared Library)롤 만들고 컴파일시
링크(ld) 되어야 하는것으로 확인 되었습니다.

IOS의 경우 시뮬레이터에서는 정적 라이브러리를 제공하고 있습니다.

FFMPEG 상용 컴포넌트도 Trial 버전은 시뮬레이터용 .so 파일만 제공하고,
실행 가능한 정품은 .a 파일을 링크해서 배포 하도록 하고 있는것 같습니다.

.a 파일이 존재하는 경로는 Search Path에 추가 하시면 되고,
LD 옵션에 추가되는 라이브러리를 추가 하시면 됩니다.

IOS의 경우 libbz2.dylib, libm.dylib가 추가로 필요하는데, 기존 라이브러리 목록에 빠져 있어서,
SDK Option에 추가 해야 됩니다.

최근에 맥과 IOS도 업데이트 되면서, 기존에 컴파일 했던 방식도 변경된 부분이 많아서,
기존에 llvm-gcc로 컴파일 했던것을 clang으로 해야 되더군요.

iTune의 공유파일를 통해서 동영상 파일을 추가 하려고 했는데, UIFileSharingEnabled 설정도
편법뿐 아직 Delphi에서 설정하는 방법은 없는것 같습니다.

ffmpeg를 컴파일해서 이미지를 보여주는 부분까지는 했는데, 아직 FireMonkey에서 TImage를 이용해서 보여주고 있어,
이미지 출력 주소를 이용해서 바로 보여주는 부분은 아직 찾지 못해 동영상이 출력시 계속 깜박거리고 있습니다.

아직 FireMonkey 관련 자료가 많이 부족해 너무 많이 고생했네요.
그 덕분에 많이 배우기도 했지만, 아직 컴파일러 자체적으로 개선해야 될 부분도 많아 보입니다.

컴파일 동영상

컴파일해서 안드로이드(옵티머스G)에 실행하고, Targer 대상을 IOS로 변경하여 컴파일후 IPAD에 실행하는 동영상입니다.
맥에서 VM으로 컴파일해서 컴파일 과정이 느립니다. 뛰어 넘어 가면서 보세요.

-

Android 라이브러리 패스 추가

libffmpeg.a, libhoffplay.a 파일이 존재하는 lib\android 경로 추가

Android에 컴파일시 필요한 라이브러리 추가

-lffmpeg -lcompiler_rt -lz 추가

IOS 라이브러리 추가

libbz2.dylib, libm.dylib 추가후 Update Local File Chahe 버튼를 누르세요.

IOS 라이브러리 패스 추가

libavcodec.a, libavdevice.a, libavformat.a, libavutil.a, libhoplayer.a, libswscale.a  파일이 존재하는 lib\ios 경로 추가

IOS에 컴파일시 필요한 라이브러리 추가

-lavcodec -lavdevice -lavformat -lavutil -lswscale -lz -lm -lbz2 추가

iTunes에서 파일공유 설정

동영상에서 보았듯이 컴파일시에 Deployment 파일 목록의 {프로젝트명}.info.plist 파일을 수정해야 적용됩니다.
(컴파일시마다 파일이 변경됨)

iTunes에서 파일공유에서 파일 확인


-

신고


 

티스토리 툴바