1

「DRM保護されたストリームが検出されました」でSTDERRをチェックするコードがあります:

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をchar[]に直接読み取る方法を知りたいです。PS。私のコードはLinuxまたはmacosで実行されます。

4

1 に答える 1

1

stderr"w"書き込み専用モードで再オープンされました。関数から判断すると、/av_gettimeを使用しているように見えるため、このような恐ろしいハックを記述してエラー メッセージを取得する代わりに、システムを調べて独自のログ関数を登録し、診断メッセージを書き込むデフォルトの動作をオーバーライドする必要があります。に。libavcodeclibavutilav_logstderr

于 2010-12-04T15:48:31.853 に答える