티스토리 툴바


만들기는 6-8 개월 전에 만들었는데, 프로젝트에 쫓기면서 살다보니 이제서야 올립니다.  sws_scale() 함수 및 rtsp 등의 프로토콜을 사용하는데 필요한 모든 코드가 포함되어 있습니다.  배속 재생 및 rtsp 버퍼링 등을 지원하는 플레이어를 만들면서 만들었던 것입니다.  FFMPEG의 소스 및 빌드 방법은 http://ryulib.tistory.com/123 를 참고하세요. (http://goo.gl/gTyQ8 에 더 쉽고 자세한 강좌가 있으니 참고하세요)


jni로 한 번 래핑해서 사용하셔야 합니다.
jstring
Java_ryulib_ffmpeg_FFMpeg_getStreamInformation(JNIEnv* env, jclass clazz, jint handle)
{
	FFmpegHandle *pHandle = (FFmpegHandle *) handle;

	char videoInformation[512];
	avcodec_string(videoInformation, sizeof(videoInformation), pHandle->pVideoCtx, 0);

	char audioInformation[512];
	avcodec_string(audioInformation, sizeof(audioInformation), pHandle->pAudioCtx, 0);

	char result[1024 * 4];

	sprintf(result,
		"%s\n%s",
		videoInformation, audioInformation
	);

    return (*env)->NewStringUTF(env, result);
}

래핑을 하시게 되면, 자신이 만든 jni로 컴파일한 so 파일과 함께 로딩해서 사용하시면 됩니다.  아래는 제가 libryumpeg.so 라는 이름으로 동적 링크 라이브러리를 만들어서 사용하는 경우의 예 입니다.  
package ryulib.ffmpeg;

import android.graphics.Bitmap;

public class FFMpeg {
	
	static {
		System.loadLibrary("ffmpeg");	
		System.loadLibrary("ryumpeg");	
	}
	
	public static final int Error_General = -1;
	public static final int Error_Can_Not_Open_File = -2;
	public static final int Error_Can_Not_Find_StreamInfo = -3;
	public static final int Error_Can_Not_Find_VidoeStream = -4;
	public static final int Error_Can_Not_Find_AudioStream = -5;
	public static final int Error_Can_Not_Open_VideoCodec = -6;
	public static final int Error_Can_Not_Open_AudioCodec = -7;
	
	public static final int UnknownPacket = 0;
	public static final int VideoPacket = 1;
	public static final int AudioPacket = 2;
	
	public static native String getDebugString();		
	
	// openFile(), closeFile(), start(), stop(): Main Thread에서 실행합니다.
	// start(), stop(): Thread-safe 합니다.
	
	// TODO : 파일이 없을 경우 어플리케이션이 죽음
	public static native int openFile(String fileName);
	public static native void closeHandle(int handle);
	
	public static native String getStreamInformation(int handle);	
	 
	// openFile() 호출 시, 내부에서 start()를 호출한 상태가 된다.
	public static native void start(int handle);
	public static native void stop(int handle);
	
	public static native int readFrameToBuffer(int handle);
	
	public static native byte[] getAudioData(int handle);
	public static native int getVideoData(int handle, Bitmap bitmap);

	public static native int getAudioPacketCount(int handle);
	public static native int getVideoPacketCount(int handle);
	
	// seekByTime(), rewindByTime(), forwardByTime(), readAudioPacket(): 동일한 쓰레드에서 사용되야 합니다. 
	
	public static native boolean seekByTime(int handle, int ms);
	public static native boolean rewindByTime(int handle, int ms);
	public static native boolean forwardByTime(int handle, int ms);

	public static native int getDuration(int handle);
	public static native int getPosition(int handle);	
	public static native int getVideoWidth(int handle);
	public static native int getVideoHeight(int handle);
	public static native int getSampleRate(int handle);
	public static native int getChannels(int handle);

}

 jni에 대해서는 아래 첨부 파일을 참고 하시기 바랍니다.








 
저작자 표시 비영리 변경 금지

'프로그래밍 > FFmpeg' 카테고리의 다른 글

libffmpeg.so for Android  (5) 2011/12/14
간단하고 명료한 FFMPEG 샘플 코드  (0) 2011/09/23
FFMPEG for Delphi #1 - 기본 예제  (1) 2011/08/11
RTSP에서 배속 문제 처리 중  (0) 2011/07/30
FFMpeg for Android #2  (28) 2011/04/19
FFMpeg for Android #1  (0) 2011/04/15
Posted by 류종택
처음에 주로 ffplayer.c 또는 ffmpeg.c 소스를 보고 공부하거나, fa player 소스 등을 살펴보곤 했었는데, 이게 분량이 너무 많아서 애로점이 많습니다.

그러다가 검색을 통해서 찾은 링크
  http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/api-example_8c-source.html

결국 libavcodec 폴더 밑에 api-example.c 라는 파일에 간단한 함수들로 구성된 예제가 있었습니다.  ㅠ.ㅠ

오늘 다시 찾아보려다가 어디에 있는 지 기억이 가물거려서 블로그에 메모를 겸한 정리를 ^^;
저작자 표시 비영리 변경 금지

'프로그래밍 > FFmpeg' 카테고리의 다른 글

libffmpeg.so for Android  (5) 2011/12/14
간단하고 명료한 FFMPEG 샘플 코드  (0) 2011/09/23
FFMPEG for Delphi #1 - 기본 예제  (1) 2011/08/11
RTSP에서 배속 문제 처리 중  (0) 2011/07/30
FFMpeg for Android #2  (28) 2011/04/19
FFMpeg for Android #1  (0) 2011/04/15
Posted by 류종택
FFMPEG 강좌를 준비하고 있었는데, 계속되는 바쁜 일정으로 인해서 미뤄지고 있습니다.  일단 시간 나는 데로 예제나 하나씩 올려보려고 합니다.  

FFMPEG을 델파이에서 사용하기 쉽도록 래핑 DLL을 만들어서 사용하는 방식을 취하고 있습니다.  DLL 내부 소스 및 설명은 언제일지는 모르지만, 오프라인 강의를 통해서 발표하려고 합니다.

WaveOut 유닛은 제가 판매하고 있는 콤포넌트의 일부라서 공개를 하지 못했습니다.  요즘 소스를 재 정비하는 중이라 더욱 공개가 어렵고, 하는 일은 단순히 Wave 음성 출력이기 때문에 공개용으로 나온 다른 콤포넌트를 사용하시기 바랍니다.
(http://symmetrica.net/newac/ 와 같은 콤포넌트를 참고하세요) 



일단 예제의 소스 입니다.   읽기 좋은 순으로 정리해뒀으며, 내용이 어렵지 않아서 설명은 생략합니다.
 


unit _fmMain;

interface

uses
  RyuMpeg, WaveOut,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TfmMain = class(TForm)
    OpenDialog: TOpenDialog;
    Image: TImage;
    Panel1: TPanel;
    btOpen: TButton;
    lbMediaInfo: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btOpenClick(Sender: TObject);
  private
    FStoped : boolean;
    FWaveOut : TWaveOut;
    FHandle : pointer;
    FMediaInfo : TMediaInfo;
    FVideoBuffer : pointer;
    function openVideo(AFileName:string):boolean;
    procedure closeVideo;
    function decodeVideo(APacket:pointer):boolean;
    function decodeAudio(APacket:pointer):boolean;
  public
  end;

var
  fmMain: TfmMain;

implementation

{$R *.dfm}

procedure TfmMain.FormCreate(Sender: TObject);
begin
  DoubleBuffered := true;
  FVideoBuffer := nil;
  Image.Picture.Bitmap.PixelFormat := _PixelFormat;

  FWaveOut := TWaveOut.Create(Self);
end;

procedure TfmMain.btOpenClick(Sender: TObject);
var
  pPacket : PByteArray;
  iPacketType, iPosition : integer;
begin
  if not OpenDialog.Execute then Exit;

  if not openVideo(OpenDialog.FileName) then Exit;

  FStoped := false;

  while readPacket(FHandle, Pointer(pPacket), iPacketType, iPosition) do begin
    if FStoped then Break;

    if iPacketType = _VideoPacket then begin
      if decodeVideo(pPacket) then Image.Repaint;
    end else if iPacketType = _AudioPacket then begin
      decodeAudio(pPacket);
    end;

    freePacket(pPacket);

    Caption := IntToStr(iPosition);
    Application.ProcessMessages;
  end;

  closeVideo;
end;

procedure TfmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FStoped := true;
end;

function TfmMain.openVideo(AFileName: string):boolean;
var
  FErrorCode : integer;
begin
  FHandle := openRyuMpegFile(PChar(AFileName), FErrorCode);
  Result := FErrorCode = 0;
  if not Result then Exit;

  getMediaInfo(FHandle, FMediaInfo);

  lbMediaInfo.Caption := StrPas(@FMediaInfo.Text);

  if FVideoBuffer <> nil then begin
    FreeMem(FVideoBuffer);
    FVideoBuffer := nil;
  end;

  GetMem(FVideoBuffer,
    FMediaInfo.VideoInfo.Width * FMediaInfo.VideoInfo.Height * _PixelSize);

  Image.Picture.Bitmap.Width := FMediaInfo.VideoInfo.Width;
  Image.Picture.Bitmap.Height := FMediaInfo.VideoInfo.Height;

  FWaveOut.Channels := FMediaInfo.AudioInfo.Channels;
  FWaveOut.SampleRate := FMediaInfo.AudioInfo.SampleRate;
  FWaveOut.Start;
end;

function TfmMain.decodeVideo(APacket:pointer): boolean;
var
  Loop, iBitmapSize : Integer;
  pSrc, pDst : ^DWord;
begin
  Result := decodeVideoPacket(FHandle, APacket, FVideoBuffer);

  // 비트맵 데이터 뒤집기.  이것을 제거하면 화면이 뒤집혀서 보인다.
  if Result then begin
    pSrc := FVideoBuffer;
    pDst := Image.Picture.Bitmap.ScanLine[0];

    iBitmapSize := FMediaInfo.VideoInfo.Width * (FMediaInfo.VideoInfo.Height-1);

    for Loop := 0 to iBitmapSize do begin
      pDst^ := pSrc^;

      Inc(pSrc);
      Dec(pDst);
    end;
  end;
end;

function TfmMain.decodeAudio(APacket: pointer): boolean;
var
  Size : integer;
  Data : packed array [0.._AVCODEC_MAX_AUDIO_FRAME_SIZE * 4] of byte;
begin
  repeat
    Sleep(5);
  until FWaveOut.DataInBuffer < 3;

  Result := decodeAudioPacket(FHandle, APacket, @Data, Size);
  if Result then FWaveOut.Play(@Data, Size);
end;

procedure TfmMain.closeVideo;
begin
  if FHandle <> nil then closeRyuMpegFile(FHandle);

  if FVideoBuffer <> nil then begin
    FreeMem(FVideoBuffer);
    FVideoBuffer := nil;
  end;
end;

end.

아래 첨부 파일에는 WaveOut을 제외한 나머지 소스와 필요한 DLL과 테스트용 exe 파일이 있습니다.  Open 버턴을 클릭하시고, 동영상 파일을 선택하시면 동영상이 바로 재생됩니다.


저작자 표시 비영리 변경 금지

'프로그래밍 > FFmpeg' 카테고리의 다른 글

libffmpeg.so for Android  (5) 2011/12/14
간단하고 명료한 FFMPEG 샘플 코드  (0) 2011/09/23
FFMPEG for Delphi #1 - 기본 예제  (1) 2011/08/11
RTSP에서 배속 문제 처리 중  (0) 2011/07/30
FFMpeg for Android #2  (28) 2011/04/19
FFMpeg for Android #1  (0) 2011/04/15
Posted by 류종택
안드로이드에서 FFMPEG을 이용해서 RTSP를 사용하는데도 상당한 시행착오를 거쳤는데, 배속을 처리해 달라는 추가 요구사항 때문에 몇 일 삽질을 했다.

우선 본인이 대상으로 하던 Wowza 서버 자체가 특정한 경우에만 Scale 헤더를 지원한다.  델파이로 RTSP 클라이언트까지 만들어서 테스트해도 잘 안되길래, 검색을 계속 하던 중에 찾은 링크!

http://www.wowza.com/forums/showthread.php?8733-RTSP-RTP-improvements-including-video-on-demand-support-(patch15-or-greater)/page7
 

No, It doesn't work with H.264/AAC content. It will work with vp6 or sorenson spark encoding in flv files.


 
아놔, 그렇게 검색해도 안나오더니 삽질을 할 만큼 하고 나니까 나오네 ㅠ.ㅠ

시간만 넉넉하다면, RTSP 서버도 만들고 싶어진다 ㅠ.ㅠ  참아야지!

저작자 표시 비영리 변경 금지

'프로그래밍 > FFmpeg' 카테고리의 다른 글

간단하고 명료한 FFMPEG 샘플 코드  (0) 2011/09/23
FFMPEG for Delphi #1 - 기본 예제  (1) 2011/08/11
RTSP에서 배속 문제 처리 중  (0) 2011/07/30
FFMpeg for Android #2  (28) 2011/04/19
FFMpeg for Android #1  (0) 2011/04/15
FFmpeg for Android 설치 및 컴파일  (12) 2011/03/17
Posted by 류종택
FFMpeg을 이용하여 만든 Android 용 동영상 플레이어 두 번째 업데이트입니다.  지난 번에는 너무 느려서 음성 싱크가 맞지 않았던, 640*480 해상도까지 음성 싱크가 맞도록 퍼포먼스를 개선한 상태입니다.  더 높은 해상도에 대해서는 프레임 수를 낮춰서 싱크를 맞추도록 할 예정입니다.

지난 번과 마찬 가지로 테스트 장비는 옵티머스 마하 입니다.

아래 녹화 이후 음성 처리 부분을 개선하여 좀더 부드럽게 업그레이드했습니다.  그런데도, 720*480 크기부터는 화면 표시가 어렵더군요, RockPlayer를 다운받아서 테스트 해보니, 역시나 마찬가지로 화면이 음성과 싱크가 깨지면서 밀립니다.  

코덱의 종류의 따라서도 밀리는 현상이 심각해지는 경우가 있습니다.

프레임 수를 낮추는 방식을 적용해보았지만, 좀 더 퍼포먼스 개선이 필요할 것 같습니다.  아니면, 현재의 싱글 코어에서는 640*480 정도가 한계일 수도 있을 듯 합니다. 




 
저작자 표시 비영리 변경 금지
Posted by 류종택
개발 PC가 맛이 가는 바람에 몇 일 고생하고, 어제 새벽 겨우 튜닝을 맞췄습니다.  아직도 성능 개선을 더해야 할 거 같지만, 그런데로 잘 동작하네요.  역시 소프트웨어 방식으로 동영상 재생하는 것은 현재 스마트 폰으로는 좀 버거운 것 같습니다.  듀얼 코어에서는 어떨지 테스트해야 하는데 아직 테스트 장비를 구하지 못해서 미루고 있습니다.

코어 쪽에 성능 개선을 하면 그런대로 쓸만하긴 하겠지만, 제가 원하는 퍼포먼스와는 상당히 거리가 머네요.  아래는 테스트 동영상 입니다. 

 
저작자 표시 비영리 변경 금지

'프로그래밍 > FFmpeg' 카테고리의 다른 글

RTSP에서 배속 문제 처리 중  (0) 2011/07/30
FFMpeg for Android #2  (28) 2011/04/19
FFMpeg for Android #1  (0) 2011/04/15
FFmpeg for Android 설치 및 컴파일  (12) 2011/03/17
Android에서 FFMpeg을 개발하기 위한 Ubuntu VMware Image  (5) 2011/03/09
FFmpeg 기초 예제  (2) 2011/02/24
Posted by 류종택

어제 새벽 작업 이후 내용을 추가합니다!!

컴파일된 libffmpeg.so 파일의 크기를 확인 못했었는데, 1KB로 표시되네요.  그리고, 원글을 제작한 개발자의 블로그에도 사용이 안된다고 나와 있습니다.  static 라이브러리로 사용하라는데, 일단 저는 다른 개발자가 만들어 놓은 libffmpeg.so를 이용해서 테스트 중 입니다.  직접 컴파일하는 것은 일단 다른 것들부터 진행하고 나서 천천히 해보려고 합니다.  

libffmpeg.so를 구할 수 있는 사이트는 아래와 같습니다.  밑에 download라고 되어 있는 링크를 사용하시기 바랍니다.  첨부 파일을 다운 받으셔도 됩니다.

http://odroid.foros-phpbb.com/t338-ffmpeg-compiled-with-android-ndk



참고로 위의 첨부에서는 img_convert(), sws_scale()의 함수는 포함되지 않은 것 같습니다.  이미지를 RGB로 변환하는 것은 따로 작성하셔야 합니다.

아래는 그동안 제가 고생한 내용을 정리합니다.  혹시나 도움이 되실 분들을 위해서..
  • Cygwin에서 작업하는 것보다는 우분투에서 작업하는 것이 더 쉽더군요. Cygwin에서 작업하다가 몇 일 더 까먹었습니다.
  • 우분투에 Z Lib를 설치하고 나서 재부팅하면 우분투가 부팅이 안되는 에러가 발생하였습니다.
     http://ryulib.tistory.com/119 를 참고하시기 바랍니다.
  • 윈도우 환경에서도 작업하기 위해서 제가 지원받은 PC가 내문서 등이 E: 드라이브로 설정되어 있었습니다.  이렇게 되면 Android 에뮬레이터가 실행되지 않는 에러가 발생합니다.  이클립스 및 안드로이드 SDK 문제인가 하고 계속 재 설치하느라, 몇 일 고생했습니다.  (일본 지진의 영향인지, 구글이 너무 느려서 다운로드 중 파일이 손상된 것인가 의심하느라)
    해당 에러 메시지를 구글에서 검색하시면 몇 가지 해결책이 나옵니다.  
    (저는 윈도우를 다시 설치하는 쪽으로..)  

 -- 아래는 위 링크의 사이트 내용입니다.

Create a new project, make jni folder, then download and extract ffmpeg, rename ffmpeg folder to ffmpeg.

 

Make a new config.sh in ffmpeg, notice a bout PREBUILT path and PLATFORM:

 

#!/bin/bash

PREBUILT=/home/abitno/Android/android-ndk-r4/build/prebuilt/linux-x86/arm-eabi-4.4.0
PLATFORM=/home/abitno/Android/android-ndk-r4/build/platforms/android-8/arch-arm

./configure --target-os=linux \
	--arch=arm \
	--enable-version3 \
	--enable-gpl \
	--enable-nonfree \
	--disable-stripping \
	--disable-ffmpeg \
	--disable-ffplay \
	--disable-ffserver \
	--disable-ffprobe \
	--disable-encoders \
	--disable-muxers \
	--disable-devices \
	--disable-protocols \
	--enable-protocol=file \
	--enable-avfilter \
	--disable-network \
	--disable-mpegaudio-hp \
	--disable-avdevice \
	--enable-cross-compile \
	--cc=$PREBUILT/bin/arm-eabi-gcc \
	--cross-prefix=$PREBUILT/bin/arm-eabi- \
	--nm=$PREBUILT/bin/arm-eabi-nm \
	--extra-cflags="-fPIC -DANDROID" \
	--disable-asm \
	--enable-neon \
	--enable-armv5te \
	--extra-ldflags="-Wl,-T,$PREBUILT/arm-eabi/lib/ldscripts/armelf.x -Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtbegin.o $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtend.o -lc -lm -ldl"

 

Then change mode config.sh and run

 

chmod +x config.sh
./config.sh

 

 

When config is completed, open config.h, find:

#define restrict restrict

 

replace by

#define restrict

 

 

Open libavutil/libm.h, remove static keyword in all function declaration.

Open Makefile in libavcodec, libavfilter, libavformat, libavutil, libpostproc and libswscale and remove two lines:

 

include $(SUBDIR)../subdir.mak
include $(SUBDIR)../config.mak

 

 

add new av.mk file in ffmpeg folder:

 

# LOCAL_PATH is one of libavutil, libavcodec, libavformat, or libswscale

#include $(LOCAL_PATH)/../config-$(TARGET_ARCH).mak
include $(LOCAL_PATH)/../config.mak

OBJS :=
OBJS-yes :=
MMX-OBJS-yes :=
include $(LOCAL_PATH)/Makefile

# collect objects
OBJS-$(HAVE_MMX) += $(MMX-OBJS-yes)
OBJS += $(OBJS-yes)

FFNAME := lib$(NAME)
FFLIBS := $(foreach,NAME,$(FFLIBS),lib$(NAME))
FFCFLAGS  = -DHAVE_AV_CONFIG_H -Wno-sign-compare -Wno-switch -Wno-pointer-sign
FFCFLAGS += -DTARGET_CONFIG=\"config-$(TARGET_ARCH).h\"

ALL_S_FILES := $(wildcard $(LOCAL_PATH)/$(TARGET_ARCH)/*.S)
ALL_S_FILES := $(addprefix $(TARGET_ARCH)/, $(notdir $(ALL_S_FILES)))

ifneq ($(ALL_S_FILES),)
ALL_S_OBJS := $(patsubst %.S,%.o,$(ALL_S_FILES))
C_OBJS := $(filter-out $(ALL_S_OBJS),$(OBJS))
S_OBJS := $(filter $(ALL_S_OBJS),$(OBJS))
else
C_OBJS := $(OBJS)
S_OBJS :=
endif

C_FILES := $(patsubst %.o,%.c,$(C_OBJS))
S_FILES := $(patsubst %.o,%.S,$(S_OBJS))

FFFILES := $(sort $(S_FILES)) $(sort $(C_FILES))

 

 

Create Android.mk in jni folder:

include $(all-subdir-makefiles)

 

Create Android.mk in ffmpeg folder:

 

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_STATIC_LIBRARIES := libavformat libavcodec libavutil libpostproc libswscale
LOCAL_MODULE := ffmpeg
include $(BUILD_SHARED_LIBRARY)
include $(call all-makefiles-under,$(LOCAL_PATH))

 

 

libavformat/Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include $(LOCAL_PATH)/../av.mk
LOCAL_SRC_FILES := $(FFFILES)
LOCAL_C_INCLUDES :=		\
	$(LOCAL_PATH)		\
	$(LOCAL_PATH)/..
LOCAL_CFLAGS += $(FFCFLAGS)
LOCAL_CFLAGS += -include "string.h" -Dipv6mr_interface=ipv6mr_ifindex
LOCAL_LDLIBS := -lz
LOCAL_STATIC_LIBRARIES := $(FFLIBS)
LOCAL_MODULE := $(FFNAME)
include $(BUILD_STATIC_LIBRARY)

 

 

libavcodec/Android.mk

 

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include $(LOCAL_PATH)/../av.mk
LOCAL_SRC_FILES := $(FFFILES)
LOCAL_C_INCLUDES :=		\
	$(LOCAL_PATH)		\
	$(LOCAL_PATH)/..
LOCAL_CFLAGS += $(FFCFLAGS)
LOCAL_LDLIBS := -lz
LOCAL_STATIC_LIBRARIES := $(FFLIBS)
LOCAL_MODULE := $(FFNAME)
include $(BUILD_STATIC_LIBRARY)

 

 

libavfilter, libavutil, libpostproc and libswscale / Android.mk

 

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include $(LOCAL_PATH)/../av.mk
LOCAL_SRC_FILES := $(FFFILES)
LOCAL_C_INCLUDES :=		\
	$(LOCAL_PATH)		\
	$(LOCAL_PATH)/..
LOCAL_CFLAGS += $(FFCFLAGS)
LOCAL_STATIC_LIBRARIES := $(FFLIBS)
LOCAL_MODULE := $(FFNAME)
include $(BUILD_STATIC_LIBRARY)

 

 

now, just go to jni folder and type ndk-build, then you will have ffmpeg.so

 

Source: http://abitno.me/compile-ffmpeg-android-ndk

 

Edit: if you need a reference:

http://rockplayer.freecoder.org/download/rockplayer_ffmpeg.zip

 

If you have some error messages about assembler, try to add this line to Android.mk LOCAL_ARM_MODE := arm 
저작자 표시 비영리 변경 금지

'프로그래밍 > FFmpeg' 카테고리의 다른 글

RTSP에서 배속 문제 처리 중  (0) 2011/07/30
FFMpeg for Android #2  (28) 2011/04/19
FFMpeg for Android #1  (0) 2011/04/15
FFmpeg for Android 설치 및 컴파일  (12) 2011/03/17
Android에서 FFMpeg을 개발하기 위한 Ubuntu VMware Image  (5) 2011/03/09
FFmpeg 기초 예제  (2) 2011/02/24
Posted by 류종택

Cygwin에서도 작업해보고 몇 가지 문제가 있어서 우분투에서도 개발환경 꾸미면서 예상치 못했던 문제가 발생해서 고생한 적이 있었습니다.  요즘 제 블로그에 이와 관련된 검색어로 들어오시는 분들이 계셔서 조금이나마 도움이 되시라고 개발환경 세팅한 VMware 이미지를 공개합니다.

설치된 것은 우분투 + Eclipse + Android SDK + Android NDK + ffmpeg + Z Lib + SDL + ffmpeg 예제 등 입니다.  위의 그림은 예제를 테스트해 본 것 입니다.  계정은 ryu, 암호는 ryu0658 입니다.

토렌트를 이용해서 다운 받으세요.


저작자 표시 비영리 변경 금지

'프로그래밍 > FFmpeg' 카테고리의 다른 글

RTSP에서 배속 문제 처리 중  (0) 2011/07/30
FFMpeg for Android #2  (28) 2011/04/19
FFMpeg for Android #1  (0) 2011/04/15
FFmpeg for Android 설치 및 컴파일  (12) 2011/03/17
Android에서 FFMpeg을 개발하기 위한 Ubuntu VMware Image  (5) 2011/03/09
FFmpeg 기초 예제  (2) 2011/02/24
Posted by 류종택
갑자기 리눅스에서 FFmpeg을 사용 할 일이 생겨서 인터넷을 죄다 뒤져가며 작업을 했지만, 서로 버전이 다른 문제로 고생하다가 해결된 내용을 올립니다.  이것도 시간이 지나면 다시 버전 문제로 이어지겠지만, 혹시나 저와 같은 고생을 하실 분들을 위해서 수정한 소스를  올립니다.  같이 사용한 라이브러리를 올리고 싶지만, 용량이 너무 커서 포기했습니다.



저의 개발환경은 
  • Cygwin + MinGW + Eclipse 입니다.  참고로 Cygwin은 작업 할 때마다 부족한 것이 생겨서 시간을 잡아 먹길래, 모든 패키지를 설치하였습니다.  
  • FFmpeg은 git://git.ffmpeg.org/ffmpeg.git 을 통해서 다운받았습니다. (last change Wed, 23 Feb 2011)  FFmpeg은 Cygwin에서 설치하였습니다.
  • x264 역시 Cygwin에서 설치하였습니다.  이넘은 no accelerated colorspace 경고를 피하고 싶을 때 사용하면 된다고 합니다. (yuv420p to rgb24 변환 시)
  • SDL은 1.2 버전을 MinGW에서 설치하였습니다.  Cygwin에서 설치하는데 에러가 나기도 하고, 인터넷 검색을 통해서 찾은 방법으로 해결이 안되었기 때문입니다.  저는 추후 SDL을 제거하고 사용할 예정이라서 이렇게 해도 크게 문제가 없는 지는 확인해보지 않았습니다.  일단 컴파일 및 실행은 잘 됩니다.  우분트와 같이 아예 리눅스 OS에서 작업한다면 문제 없을 거라는 이야기도 있었으나, 아직 확인해보지 않았습니다.

우분투에서 설치해보니 모두 문제없이 쉽게 설치가됩니다.  참고하시기 바랍니다.



  • http://dranger.com/ffmpeg/ 에 있는 예제를 제가 받을 때 당시의 최신 버전의 FFmpeg에 맞춰서 조금 수정한 것 입니다.



저작자 표시 비영리 변경 금지

'프로그래밍 > FFmpeg' 카테고리의 다른 글

RTSP에서 배속 문제 처리 중  (0) 2011/07/30
FFMpeg for Android #2  (28) 2011/04/19
FFMpeg for Android #1  (0) 2011/04/15
FFmpeg for Android 설치 및 컴파일  (12) 2011/03/17
Android에서 FFMpeg을 개발하기 위한 Ubuntu VMware Image  (5) 2011/03/09
FFmpeg 기초 예제  (2) 2011/02/24
Posted by 류종택