2010-12-04 3 views
1

에서 나는 '발견 DRM으로 보호 된 스트림'로 STDERR을 확인하는 코드가 : 그것은 작동문자로 표준 오류를 읽는 방법 [] C

const static char* DRM_TOKEN = "DRM protected stream detected"; 

const char* source = argv[1]; 
char tempfile[80]; 
memset(tempfile, 0, 80); 
snprintf(tempfile, 80, "stderr_%lld.log", av_gettime()); 
freopen(tempfile, "w", stderr); 

fflush(stderr); 
FILE *fp = fopen(tempfile, "r"); 
if(fp) 
{ 
    char STDERR[256]; 
    while(!feof(fp)) 
    { 
    memset(STDERR, 0, sizeof(char) * 256); 
    fgets(STDERR, 256, fp); 
    if(strstr(STDERR, DRM_TOKEN) != NULL) 
    { 
     drm = 1; 
     break ; 
    } 
    } 
    fclose(fp); 
} 

을,하지만 난에 STDERR를 읽고 직접 방법 중 하나를 알고 싶어요 숯[]. PS. 내 코드는 리눅스 또는 macos에서 실행됩니다.

+0

마지막으로 ffmpeg에서 로그 메시지를 가져 오는 올바른 방법을 발견했습니다. 함수 av_log_set_callback을 제공합니다. 모든 로그 메시지를 직접 가져올 수 있습니다. http://ffmpeg.org/doxygen/trunk/log_8c.html – qrtt1

답변

1

stderr은 쓰기 전용 인 "w" 모드에서 다시 열었습니다. av_gettime 함수로 판단하면 libavcodec/libavutil을 사용하는 것처럼 보이므로 오류 메시지를 얻기 위해 끔찍한 해킹을 작성하는 대신 av_log 시스템에서 읽고 기본 동작을 무시하는 자체 로깅 기능을 등록해야합니다 진단 메시지를 stderr에 기록하십시오.

관련 문제