void *receiveFrames(void *arg)
{
struct MHD_Connection **connection = (struct MHD_Connection **)arg;
cout << "uuuuuuuuuuuuuuuuuuu" << endl;
pthread_cleanup_push(clean_fun, NULL);
pthread_testcancel();
const char *inputFilename = "rtsp://admin:**********@*********************";
// const char *outputFilename = "output.flv";
const char *outputFilename = "*************.flv";
av_register_all();
avformat_network_init();
// 设置参数
AVDictionary *format_opts = NULL;
av_dict_set(&format_opts, "stimeout", to_string(5 * 1000000).c_str(), 0);
// 设置推流的方式
av_dict_set(&format_opts, "rtsp_transport", "tcp", 0);
AVFormatContext *inputFormatContext = avformat_alloc_context();
// 打开输入文件=====================
if (avformat_open_input(&inputFormatContext, inputFilename, NULL, &format_opts) != 0)
{
cout << "Could not open input file" << endl;
// return -1;
}
if (avformat_find_stream_info(inputFormatContext, NULL) < 0)
{
cout << "Not found stream info" << endl;
// return -1;
}
int videoStreamIndex = -1;
for (int i = 0; i < inputFormatContext->nb_streams; i++)
{
if (inputFormatContext->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
{
videoStreamIndex = i;
break;
}
}
if (videoStreamIndex == -1)
{
cout << "not found AVMEDIA_TYPE_VIDEO" << endl;
// return -1;
}
AVStream *videoStream = inputFormatContext->streams[videoStreamIndex];
AVCodecParameters *codecParameters = videoStream->codecpar;
// 寻找解码器
AVCodec *codec = avcodec_find_decoder(codecParameters->codec_id);
// 创建解码器上下文
AVCodecContext *codecContext = avcodec_alloc_context3(codec);
//
if (avcodec_parameters_to_context(codecContext, codecParameters) < 0)
{
// return -1;
}
// 打开解码器
if (avcodec_open2(codecContext, codec, nullptr) < 0)
{
// return -1;
}
// 找到编码器====