// 저장될 Document path 가져오기.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

// 저장할 파일이름 지정.

documentsDirectory = [documentsDirectory stringByAppendingPathComponent:@"/tmpMovie.m4v"];

    

// byteData를 data에 저장.

NSData *data = [NSData dataWithBytes:byteData_1 length:byteSize];

    

// data 를 파일로 저장.

[data writeToFile:documentsDirectory atomically:YES];

 

아이폰에서 m4v동영상을 바이트 단위로 자른 후 다시 붙여서 플레이를 해보았다.

정상적으로 플레이는 되지만 몇가지 문제가 발생.

실제로 내가 다시 붙인 데이터는 원래의 50%이지만 플레이시간은 원래의 풀타임이

적용되고 또한 데이터가 없는데도 불구하고 플레이가 계속되었다. 물론 플레이어의

상태바(status bar) 또한 자료가 있는것처럼 하얀색으로 표시되었다.


내가 원하는 것은 HTTP Live Streaming 처럼 존재하는 데이터만큼만 플레이하는 것인데

도무지 갈피를 못 찾겠다. 상태바는 어떻게 컨트롤하는건지도 영 모르겠네....;;


* MPMoviePlayerController & MPMoviePlayerViewController 사용.


 //------------------------

 // split binary data

 //------------------------

 NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"nozzang" ofType:@"m4v"];

 NSData *movieData = [NSData dataWithContentsOfFile:moviePath];

    

 int byteSize = 1000000;

 // 메모리 할당.

 Byte *byteData_2 = (Byte*)malloc(byteSize); 

// 메모리에 카피

memcpy(byteData_2, [[movieData subdataWithRange:NSMakeRange(1000000,1999999)] bytes] , byteSize);


Byte *byteData_3 = (Byte*)malloc(byteSize);

memcpy(byteData_3, [[movieData subdataWithRange:NSMakeRange(2000000,2999999)] bytes], byteSize);


Byte *byteData_4 = (Byte*)malloc(byteSize);

memcpy(byteData_4, [[movieData subdataWithRange:NSMakeRange(3000000,3999999)] bytes], byteSize);


Byte *byteData_5 = (Byte*)malloc(byteSize);

memcpy(byteData_5, [[movieData subdataWithRange:NSMakeRange(4000000,4999999)] bytes], byteSize);


//-----------------

// append data

//-----------------

[movieData_real appendBytes:byteData_2 length:byteSize];

 NSUInteger movieData_real_len = [movieData_real length];

    

[movieData_real appendBytes:byteData_3 length:byteSize];

 movieData_real_len = [movieData_real length];


[movieData_real appendBytes:byteData_4 length:byteSize];

movieData_real_len = [movieData_real length];


[movieData_real appendBytes:byteData_5 length:byteSize];

movieData_real_len = [movieData_real length];


//------------------------

// save file

//------------------------

NSArray *paths_tmp = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory_tmp = [paths_tmp objectAtIndex:0];

documentsDirectory_tmp = [documentsDirectory_tmp stringByAppendingPathComponent:@"/tmpMovie.m4v"];

[movieData_real writeToFile:documentsDirectory_tmp atomically:YES];

NSFileManager를 이용하여 폴더를 생성할 수 있다.


NSFileManager *manager = [NSFileManager defaultManager];

[[NSFileManager defaultManager]createDirectoryAtPath:documentsDirectory withIntermediateDirectories:NO attributes:nil error:nil];



파일삭제.

ocumentsDirectory는 파일경로 NSString이다.


[[NSFileManager defaultManager] removeItemAtPath:documentsDirectory error:nil];

아래와 같은 코드를 NSTimer를 이용하여 반복적으로 체크를 하면 Control bar들이 보일시에는 값이 1 안보일시에는 값이 0으로 표시된다.


이러한 값을 이용하여 overlay하여 추가적인 버튼이나 이미지를 넣었을시 컨트롤바와 같이 사라지거나 나타나도록 조절할 수 있다.


NSTimer의 체크타임은 0.2초로 하는것이 딜레이없이 잘 나타나는거 같다.


NSTimer timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(check:) userInfo:nil repeats:YES];


BOOL controlsVisible = NO;

for(id views in [[_moviePlayer view] subviews]){

 for(id subViews in [views subviews]){

   for (id controlView in [subViews subviews]){

     controlsVisible = ([controlView alpha] <= 0.0) ? (NO) : (YES);

   }

  }

}

NSLog(@"player controls are visible: %d", controlsVisible);


//종료 명령어 - 종료를 하지않으면 무한반복되어 메모리오류 및 어플리케이션에 문제를 일으킨다.

[timer invalidate];

timer = nil;

'Tips & Tech > Objective-C' 카테고리의 다른 글

m4v를 byte로 나누고 그 byte를 다시 append 하여 파일저장.  (0) 2012.02.27
파일 및 폴더 관리  (0) 2012.02.27
Xcode4 SVN 사용하기.  (0) 2012.02.27
Objective-c 상속  (0) 2012.02.27
Objective-c 시작하기  (0) 2012.02.27

                              ****Xcode 4 SVN이 잘 되지 않을때의 해결 방법.****

터미널에서 수행~

>>>>   svn list 주소(예:svn://주소~)


를 적어주시고 엔터를 치면 컴퓨터의 유저 암호를 물어본다음

svn에 접속할때 쓰는 이름과 패스워드를 물어봅니다.

이렇게 한번 접속을 해서 svn리스트를 한번 보고나면 다음에는 접속이 됩니다.


이유  : 우선 암호와 유저이름이 xcode4에서 사실은 입력이 않되는거고,

위와같이 콘솔에 작업을 하면 접속되는 이유는 무언가 캐쉬쪽?에 아이뒤와 패스워드가 저장되는 무언가가 

생성되어서 다음부터는 되는거 같습니다. 그래서 기존에 콘솔에서 접속했던 아이디가 아닌 다른아이디로

접속을 하면 또 않됩니다.


자료출처:맥부기 카페 "xcode4 Repositories svn 작동 않함 이건 정말!! 대단하다"

http://cafe.naver.com/mcbugi.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=119565&

  

+ Recent posts