我正在使用下一个代码:
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是好的,程序正在运行,没有错误。请告诉我有什么问题。
答案 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]