在下面这个函数中,解析出input的size: oriw,orih
srs_error_t SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata)
{
SrsAmf0Any* prop = NULL;
if ((prop = metadata->metadata->ensure_property_number("width")) != NULL) {
req->oriw = (int)prop->to_number();
}
if ((prop = metadata->metadata->ensure_property_number("height")) != NULL) {
req->orih = (int)prop->to_number();
}
srs_trace("publish-size = %dx%d",req->oriw,req->orih);
}
然后,启动转码线程。这样就可以根据input size来选择合适的转码尺寸。
转码线程主处理过程:
if ((p->w - p->h) < 0)
outSize = "720x1280";
else
outSize = "1280x720";
sprintf(sCmd,"cd ./objs; ln -s fftool ff%06d;"
"nohup ./ff%06d -d -i %s -sc_threshold 0 -s %s -vcodec libx264 -b:v 800k -bufsize 800k -maxrate 1000k "
"-profile:v high -preset faster -tune psnr "
"-c:a copy -f flv %s 1>/dev/null 2>&1 &",p->sn,p->sn,p->inUrl,outSize.c_str(),p->outUrl);
usleep(500000);
ret=system(sCmd);
这些转码参数是我历经无数次测试后推荐的,性价比最优的参数。