모바일 그리드 개발자 페이지

문의 사항이 있으시면, 010-8365-2781 (김윤태)로 연락부탁드립니다.

모바일 제품 종류 및 설명

1. 모바일 다운로드

그리드 기술이 적용된 다운로드

Android는 aar 형태의 라이이브러리로 제공됩니다.

현재 iPhone 은 라이이브러리로 제공하지 않습니다.

2. 모바일 다운로드 플러스

그리드 기술이 적용된 모바일 컨텐츠 다운로드, "다운로드" 와 다르게 컨텐츠를 다운로드 도중 컨텐츠 재생이 가능하며 SEEK 를 지원합니다.

다운로드 도중 컨텐츠는 임시 파일(.part)의 형태로 진행되며, 다운로드 완료시 원래 파일명으로 변경됩니다.

3. 모바일 스트리밍 플레이어 앱 및 라이브러리

SEEK, 배속, 이어보기, 화면 밝기, 볼륨조절 등이 지원되는 실시간 컨텐츠 재생합니다.

플레이어 앱은 iCoxs에서 제공하며, 라이브러리를 사용하실때는 aar 로 제공됩니다.

거의 모든파일에 플레이가 가능합니다.

모듈 설명

*표는 그리드 사용시 필수항목입니다.

1. 파일 서버 모듈 - mserver *

스토리지가 리눅스 일 경우 mserver (32bit, 64bit), Windows 일 경우 mserver.exe 로 제공되며, HTTP 프로토콜을 지원하는 파일 서버 모듈 입니다.

이미 파일서버에 HTTP 서비스 중일경우(nginx, apache 등), mserver 를 설치 하지 않으셔도 됩니다.

mserver.cnf 의 설정파일을 지원합니다. 설정파일에 id, password를 입력하여 인증을 사용할 수 있습니다.

2. Android 그리드 다운로드, 다운로드 플러스 모듈 - libmgrid.aar

다운로드 어플에 장착하여 다운로드 시작은 _startDown() 호출하고, 다운로드 상태는 _getDownInfo() 또는 _getDownInfo2(), 다운로드 중시에는 _stopDown()를 호출합니다.

3. Android 그리드 스트리밍

앱의 스프레쉬, 아이콘 등을 작성하셔서 iCoxs에 전달하시고, 앱이 테스트 완료된 후에 앱 스토어에 등록 하시면 됩니다.

모바일 그리드 설명

도입 순서

1. 파일서버에서 mserver 을 실행하여 주십시오. 또는 apache, nginx 등을 통해서 HTTP가 가능한지 확인하세요.

2. Android 어플에 mgrid.aar를 장착하십시오.

3. 내부 테스트 후 앱 스토어에 등록하세요.

모바일 그리드 장착 설명

그리드 모듈과의 통신은 JSON 으로 되어 있습니다. JSON의 Key-Value 모두 String 형태로("xxx":"yyyy") 로 작성하십시오.

1. 프로젝트 폴더의 libs 폴더에 mgrid-release-xxxxxxx.aar 파일을 추가 후, build.gradle 에 dependencies 항목에 추가해 주세요.
		
    // 아래 4개를 추가한다.
    implementation files('libs/mgrid-release-2106010.aar')  // 다운로드
    implementation files('libs/mstreamgrid-release-2106010.aar') //스트리밍
    implementation files('libs/libmplayer-release-2107050.aar')  //플레이어 
    implementation 'com.google.android.gms:play-services-cast-framework:20.1.0'  //PIP 라이브러리
		
		
2. Downloader 인스턴스 생성
		
	protected Downloader mDownloader = null;
	...
	...
	
	mDownloader = Downloader.getInstance("demo");  // 사이트 아이디를 입력하세요.
	
	String downloadJson = makeDownloadJson3();
	mDownloadGridThread = new DownloadGridThread(1, downloadJson); // 그리드 다운로드 시작 0: 다운로드, 1: 다운플러스
	mDownloadGridThread.isThreadStop = false;
	mDownloadGridThread.start();

	...
	...
		
		
3. DownloadGridThread 클래스

상세한 사항은 데모프로그램을 참조하세요.

		
	
	private class DownloadGridThread extends Thread {
        public boolean isThreadStop = false;
        public boolean isSuspend = false;
        private int mDownType = 0;
        private String mDownJsonStr = "";


        public DownloadGridThread(int downType, String jsonStr) {
            mDownType = downType;
            mDownJsonStr = jsonStr;
            Log.i(TAG, "create Download Thread START");
        }


        @Override
        public void run() {

            final int startErr = startDownload();
            if( startErr != 0) { //-1 일때는 파일이 있다.
                Log.e(TAG, "Download Thread run error");
                downloadJsonString = "";

                runOnUiThread(new Runnable() { public void run() {
                    if (startErr == -1) {
                        Toast.makeText(getApplicationContext(), "파일이 존재합니다.", Toast.LENGTH_SHORT).show();
                    }else{
                        Toast.makeText(getApplicationContext(), "에러발생 Code=" + startErr, Toast.LENGTH_SHORT).show();
                    }
                } });
                return;
            }

            while (!isThreadStop) {

                if (isSuspend) continue;
                if (isThreadStop) break;

                final String infoJsonString = mDownloader.getDownInfo();
                //Log.d(TAG, infoJsonString);

                runOnUiThread(new Runnable() { public void run() {
                    showDownInfoString(infoJsonString);
                    //Toast.makeText(BaseActivity.this , debugMessage, Toast.LENGTH_SHORT).show();
                } });

                int state = getStateCode(infoJsonString);

                if (!(state == 1 || state == 2)){
                    break;
                }

                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    Log.e(TAG, "run:" + e.getMessage());
                }

            } //end while

            Log.i(TAG, "download thread STOP~~");
            if (mDownloader != null)
                mDownloader.stopDownload();

            final String infoJsonString = mDownloader.getDownInfo();
            Log.d(TAG, infoJsonString);

            runOnUiThread(new Runnable() { public void run() {
                showDownInfoString(infoJsonString);
            } });
        }

        public void resumeDownload(){
            if (mDownloader != null)
                mDownloader.resumeDownload();
        }

        public void pauseDownload(){
            if (mDownloader != null)
                mDownloader.pauseDownload();
        }

        private int startDownload(){

            Log.d(TAG, "!!!!!!!!!!! downloader !!!!!!!!! START" + this.mDownType);
            try{
                mDownloader = Downloader.getInstance("demo");
                Log.d(TAG, "!!!!!!!!!!! downloader !!!!!!!!! 2222222");
                if (mDownloader == null){
                    Log.d(TAG, "downloader object is null");
                    return -1;
                }

            }catch (Exception e){
                e.printStackTrace(); //오류 출력(방법은 여러가지)
                throw e; //최상위 클래스가 아니라면 무조건 던져주자
            }


            Log.d(TAG, "!!!!!!!!!!! downloader !!!!!!!!! 33333");
            downloadJsonString = mDownloader.startDownload(mDownType, mDownJsonStr);

            Log.d(TAG, "return startDownload:: " + downloadJsonString);


            // error code
            // return json string
            // 예제 : {"err":0, "localfile": "/storage/emulated/0/Download/1.mp4", "subtitle": "/storage/emulated/0/Download/1.smi"}
            // err 이 0이면 정상, startdownload return error code 참조
            // Ok(0), ErrAlreadyFileExist(-1), ErrParameter(-2), ErrWrite(-3), ErrSpaceLack(-4), ErrDirectoryError(-5), ErrWorking(-6);

            try {
                JSONObject obj = new JSONObject(downloadJsonString);
                int errCode = (int) obj.getInt("err");
                if (obj.has("localfile")){
                    ContentPath = obj.getString("localfile");
                }
                if (obj.has("url")){
                    ContentPath = obj.getString("url");
                }

               // ContentPath = "http://127.0.0.1:11120/00fbaefba9243e682f094689ccd397ef_2284420818.avi";
                Log.d(TAG, "ContentPath="+ ContentPath + " errCode="+ errCode);
                return errCode;
            } catch (JSONException e) {
                e.printStackTrace();
                return -99;
            }
        }

        private int executePlayer(){
            return 0;
        }

    }
		
		

FAQ

1. smmgr.exe 설치시에 silent 옵션은 /VERYSILENT /SUPPRESSMSGBOXES 사용하십시오.

메뉴얼 링크

PC 다운로드 메뉴얼

PC 스트리밍 메뉴얼

모바일 다운로드 메뉴얼

모바일 스트리밍 메뉴얼

Mac 다운로드 어플리케이션 메뉴얼

다운로드

모듈 / OS Windows Linux Android Mac
서버 모듈 mserver_setup.exe mserver-linux.zip    
다운로드 라이브러리 libmgrid.dll   libmgrid.aar mstreamgrid.aar libmgrid.dylib
피어 모듈 smmgr_setup.exe      
DEMO 프로그램 MGridDemo.zip   MyGrid_Android.zip Mac_Demo.zip
플레이어 라이브러리   libmplayer.aar libvlc.aar