2013-02-12 3 views
0

현재 iOS 응용 프로그램에서 C 프로그램으로 rtmpdump을 사용하고 있습니다. 그러나 응용 프로그램을 다시 시작하지 않고도 한 번 이상 사용할 수는 없습니다. 이 문제의 원인은 무엇이며 어떻게 해결할 수 있습니까?C 라이브러리 해제 (ARC 사용)

관련 코드 :

NSDictionary *details = [args objectAtIndex:0]; //rtmpe deatils 
NSString *flvStore = [args objectAtIndex:1]; 
NSString *mp4Store = [args objectAtIndex:2]; 
[self performSelectorOnMainThread:@selector(updateProgressBar:) withObject:flvPath waitUntilDone:NO]; 
[self getFlashFile:details withFlvPathName:flvStore]; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 
if([fileManager fileExistsAtPath:flvPath]){ 
    NSNumber *filesize = 0; 
    NSDictionary *fileAttributes = [[NSFileManager defaultManager] fileAttributesAtPath:flvPath traverseLink:NO]; 
    if(fileAttributes != nil){ 
     filesize = [fileAttributes objectForKey:NSFileSize]; 
    } 

    if([filesize longLongValue] > 1024){ 
     [self removeFlvWrapper:flvPath withMp4PathName:mp4Path andTitle:[thePid objectForKey:@"title"]]; 
    } 
    [fileManager removeItemAtPath:flvPath error:NULL]; 
} 

- (void)getFlashFile:(NSDictionary *)details withFlvPathName:(NSString *)flvPath { 
static char **rt_argv; 
static int rt_argc; 

rt_argc = 16; 
rt_argv = (char **)malloc(sizeof(char *) * (rt_argc)); 
rt_argv[0] = "rtmpdump"; 
rt_argv[1] = (char *)[@"-r" UTF8String]; 
rt_argv[2] = (char *)[[details objectForKey:@"r"] UTF8String]; 
rt_argv[3] = (char *)[@"-a" UTF8String]; 
rt_argv[4] = (char *)[[details objectForKey:@"a"] UTF8String]; 
rt_argv[5] = (char *)[@"-f" UTF8String]; 
rt_argv[6] = (char *)[@"WIN 10,0,32,18" UTF8String]; 
rt_argv[7] = (char *)[@"-W" UTF8String]; 
rt_argv[8] = (char *)[[details objectForKey:@"W"] UTF8String]; 
rt_argv[9] = (char *)[@"-p" UTF8String]; 
rt_argv[10] = (char *)[[details objectForKey:@"p"] UTF8String]; 
rt_argv[11] = (char *)[@"-y" UTF8String]; 
rt_argv[12] = (char *)[[details objectForKey:@"y"] UTF8String]; 
rt_argv[13] = (char *)[@"-o" UTF8String]; 
rt_argv[14] = (char *)[flvPath UTF8String]; 
rt_argv[15] = (char *)[@"-q" UTF8String]; 

getStream(rt_argc, rt_argv); 
finished = true; 
} 

당신은 또한 BigBadOwl repository under iPlayerFetch.m 볼 수는 유사한 코드를 볼 수 있습니다.

+5

더 이상'[@ "foo"UTF8String]'please! C에는 상수 문자열도 있습니다. ''foo ''는 괜찮습니다. –

+3

두 번 해보려하면 잘못 될 수 있습니까? 왜 다시 사용할 수 없습니까? –

+0

확실하지 않습니다 ... 두 메서드는 사용자가 tablecell을 클릭 할 때마다 만들어지는 DMDownloader라는 별개의 클래스에 있습니다. getFlashFile에 UI가 멈 추면 다운로드가 작동하는지 확인할 수 있습니다. 그러나 사용자가 두 번째로 셀을 클릭하면 UI가 멈추지 않고 임시 파일 (flv)이 처음으로 임시 디렉토리에 만들어지지 않습니다. –

답변

0

Objective-C에서 rtmpdump 대신 사용할 수있는 대안을 만들었습니다. 이 코드는 rtmpdump보다는 librtmp를 사용하지만 rtmpdump에서 영감을 받았습니다.

감사합니다.

+0

안녕하세요 다스, 고객을 위해 내가 직접 rtmp 변환기를 개발해야합니다. NSPipe 패러다임을 사용하고 싶습니다만, avformat_open_input이 붙어 있습니다. rtmpdump에 대한 Objective-C 대안을 쓰는 방법에 대한 더 많은 힌트를 줄 수 있습니까? – valvoline

관련 문제