1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

for #711, support prefile for transcode. 3.0.12

This commit is contained in:
winlin 2017-01-06 10:39:37 +08:00
parent 35cd4c407c
commit 4709d0214c
8 changed files with 84 additions and 28 deletions

View file

@ -3982,7 +3982,7 @@ int SrsConfig::check_config()
&& e != "vbitrate" && e != "vfps" && e != "vwidth" && e != "vheight"
&& e != "vthreads" && e != "vprofile" && e != "vpreset" && e != "vparams"
&& e != "acodec" && e != "abitrate" && e != "asample_rate" && e != "achannels"
&& e != "aparams" && e != "output"
&& e != "aparams" && e != "output" && e != "perfile"
&& e != "iformat" && e != "oformat"
) {
ret = ERROR_SYSTEM_CONFIG_INVALID;
@ -5377,6 +5377,41 @@ bool SrsConfig::get_engine_enabled(SrsConfDirective* conf)
return SRS_CONF_PERFER_FALSE(conf->arg0());
}
string srs_prefix_underscores_ifno(string name)
{
if (srs_string_starts_with(name, "-")) {
return name;
} else {
return "-" + name;
}
}
vector<string> SrsConfig::get_engine_perfile(SrsConfDirective* conf)
{
vector<string> perfile;
if (!conf) {
return perfile;
}
conf = conf->get("perfile");
if (!conf) {
return perfile;
}
for (int i = 0; i < (int)conf->directives.size(); i++) {
SrsConfDirective* option = conf->directives[i];
if (!option) {
continue;
}
perfile.push_back(srs_prefix_underscores_ifno(option->name));
perfile.push_back(option->arg0());
}
return perfile;
}
string SrsConfig::get_engine_iformat(SrsConfDirective* conf)
{
static string DEFAULT = "flv";
@ -5412,7 +5447,7 @@ vector<string> SrsConfig::get_engine_vfilter(SrsConfDirective* conf)
continue;
}
vfilter.push_back("-" + filter->name);
vfilter.push_back(srs_prefix_underscores_ifno(filter->name));
vfilter.push_back(filter->arg0());
}
@ -5566,7 +5601,7 @@ vector<string> SrsConfig::get_engine_vparams(SrsConfDirective* conf)
continue;
}
vparams.push_back("-" + filter->name);
vparams.push_back(srs_prefix_underscores_ifno(filter->name));
vparams.push_back(filter->arg0());
}
@ -5656,7 +5691,7 @@ vector<string> SrsConfig::get_engine_aparams(SrsConfDirective* conf)
continue;
}
aparams.push_back("-" + filter->name);
aparams.push_back(srs_prefix_underscores_ifno(filter->name));
aparams.push_back(filter->arg0());
}

View file

@ -976,6 +976,10 @@ public:
* whether the engine is enabled.
*/
virtual bool get_engine_enabled(SrsConfDirective* conf);
/**
* get the perfile of engine
*/
virtual std::vector<std::string> get_engine_perfile(SrsConfDirective* conf);
/**
* get the iformat of engine
*/

View file

@ -112,6 +112,7 @@ int SrsFFMPEG::initialize_transcode(SrsConfDirective* engine)
{
int ret = ERROR_SUCCESS;
perfile = _srs_config->get_engine_perfile(engine);
iformat = _srs_config->get_engine_iformat(engine);
vfilter = _srs_config->get_engine_vfilter(engine);
vcodec = _srs_config->get_engine_vcodec(engine);
@ -264,6 +265,17 @@ int SrsFFMPEG::start()
params.push_back(_iparams);
}
// build the perfile
if (!perfile.empty()) {
std::vector<std::string>::iterator it;
for (it = perfile.begin(); it != perfile.end(); ++it) {
std::string p = *it;
if (!p.empty()) {
params.push_back(p);
}
}
}
// input.
if (iformat != "off" && !iformat.empty()) {
params.push_back("-f");

View file

@ -51,6 +51,7 @@ private:
private:
std::string ffmpeg;
std::string _iparams;
std::vector<std::string> perfile;
std::string iformat;
std::string input;
std::vector<std::string> vfilter;

View file

@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// current release version
#define VERSION_MAJOR 3
#define VERSION_MINOR 0
#define VERSION_REVISION 11
#define VERSION_REVISION 12
// generated by configure, only macros.
#include <srs_auto_headers.hpp>