ffmpeg,'找不到协议'错误

时间:2017-08-13 21:13:34

标签: c ffmpeg

我正在使用下一个代码:

const char *sFileOutput;
AVOutputFormat *ofmt;
AVFormatContext *ofcx;

        int main( int argc, char* argv[] )
        {
            av_log_set_level( AV_LOG_DEBUG );
            av_register_all();
            avcodec_register_all();
            avformat_network_init();

            char s1[40]={0};
            const time_t timer = time(NULL);
            u = localtime(&timer);
            strftime(s1, 40, "%d.%m.%Y-%H:%M:%S.avi", u);
            sFileOutput=&s1;

            //char *sFileOutput = "01.01.2017-23.23.23.avi";

            ofmt = av_guess_format( NULL, sFileOutput, NULL );
            ofcx = avformat_alloc_context();
            ofcx->oformat = ofmt;
            int ret2=avio_open( &ofcx->pb, sFileOutput, AVIO_FLAG_WRITE);
            if(ret2<0){
                fprintf(stderr, "\nError occurred when opening output file: %s\n",av_err2str(ret2));
            }
        }

当我运行它时,我在控制台中出错:

Error occurred when opening output file: Protocol not found

但如果我取消注释字符串

char *sFileOutput = "01.01.2017-23.23.23.avi";

evirything是好的,程序正在运行,没有错误。请告诉我有什么问题。

2 个答案:

答案 0 :(得分:1)

谢谢你的回答,这也对我很有帮助。 但真正的问题是生成的名称包含&#39;:&#39;。我将字符串更改为

strftime(s1, 40, "%d.%m.%Y-%H.%M.%S.avi", u);

并且效果很好。

答案 1 :(得分:0)

当你这样做时:

sFileOutput=&s1

&s1创建一个类型为char (*)[40]的指针,而不是像您期望的那样指向数组的第一个元素的指针。您正在传递指向整个数组的指针,该指针将转换为不兼容的类型。检查编译警告/错误。

解决方案是使用隐式转换:

sFileOutput=s1

或:

sFileOutput=&s1[0]