Skip to content

Commit

Permalink
for #711, support prefile for transcode. 3.0.12
Browse files Browse the repository at this point in the history
  • Loading branch information
winlinvip committed Jan 6, 2017
1 parent 35cd4c4 commit 4709d02
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 28 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ Please select your language:
- [x] [experiment] Support push POST FLV over HTTP, please read [wiki]([CN][v2_CN_Streamer2], [EN][v2_EN_Streamer2]).
- [x] [experiment] Support multiple processes by [dolphin][srs-dolphin] or [oryx][oryx].
- [x] [experiment] Support [mgmt console][console], please read [srs-ngb][srs-ngb].
- [ ] Enhanced HLS audio-only use aac instead of ts.
- [ ] Enhanced forward with vhost and url variables.
- [ ] Support source or idle stream cleanup.
- [ ] Support origin cluster, please read [#464][bug #464], [RTMP 302][bug #92].
Expand All @@ -183,6 +184,7 @@ Please select your language:

### V3 changes

* v3.0, 2017-01-06, for [#711][bug #711] support perfile for transcode. 3.0.12
* v3.0, 2017-01-05, patch ST for valgrind and ARM. 3.0.11
* v3.0, 2017-01-05, for [#324][bug #324], always enable hstrs. 3.0.10
* v3.0, 2016-12-15, fix [#717][bug #717], [#691][bug #691], http api/static/stream support cors. 3.0.9
Expand Down Expand Up @@ -1304,6 +1306,7 @@ Winlin
[bug #511]: https://github.com/ossrs/srs/issues/511
[bug #717]: https://github.com/ossrs/srs/issues/717
[bug #691]: https://github.com/ossrs/srs/issues/691
[bug #711]: https://github.com/ossrs/srs/issues/711
[bug #xxxxxxxxxx]: https://github.com/ossrs/srs/issues/xxxxxxxxxx

[exo #828]: https://github.com/google/ExoPlayer/pull/828
Expand Down
24 changes: 5 additions & 19 deletions trunk/.gitignore
Original file line number Diff line number Diff line change
@@ -1,25 +1,13 @@
console*.conf
doc/frozen.2Mbps.1644x1028.flv
doc/frozen.500Kbps.766x480.flv
doc/kungfupanda3-tlr1_h1080p.200kbps.flv
doc/kungfupanda3-tlr1_h1080p.300kbps.flv
doc/kungfupanda3-tlr1_h1080p.400kbps.flv
doc/kungfupanda3-tlr1_h1080p.500kbps.flv
doc/kungfupanda3-tlr1_h1080p.600kbps.flv
doc/kungfupanda3-tlr1_h1080p.700kbps.flv
doc/kungfupanda3-tlr1_h1080p.800kbps.flv
doc/kungfupanda3-tlr1_h1080p.8mbps.flv
doc/kungfupanda3-tlr1_h1080p.900kbps.flv
doc/time.300kbps.flv
edge.conf
*.conf
doc/frozen*.flv
doc/kungfupanda*.flv
doc/time*.flv
html
ide/srs_xcode/srs_xcode.xcodeproj/project.xcworkspace/xcshareddata/
ide/srs_xcode/srs_xcode.xcodeproj/project.xcworkspace/xcuserdata/
ide/srs_xcode/srs_xcode.xcodeproj/xcuserdata/
ingest.conf
origin.conf
research/aac/
research/api-server/.idea/
.idea/
research/api-server/static-dir/mse
research/bat/
research/big/
Expand All @@ -33,10 +21,8 @@ research/golang/temp.flv
research/librtmp/720p.h264.raw
research/librtmp/test.h264
research/licenser/
research/players/.idea/
research/players/fls_player/
research/players/mic/
research/players/srs_player/.idea/
research/proxy/
research/redis-ocluster/
research/rtmfp/
Expand Down
23 changes: 19 additions & 4 deletions trunk/conf/full.conf
Original file line number Diff line number Diff line change
Expand Up @@ -1277,14 +1277,29 @@ vhost example.transcode.srs.com {
# the transcode engine for matched stream.
# all matched stream will transcoded to the following stream.
# the transcode set name(ie. hd) is optional and not used.
# we will build the parameters to fork ffmpeg:
# ffmpeg <perfile>
# -i <iformat>
# <vfilter>
# -vcodec <vcodec> -b:v <vbitrate> -r <vfps> -s <vwidth>x<vheight> -profile:v <vprofile> -preset <vpreset>
# <vparams>
# -acodec <acodec> -b:a <abitrate> -ar <asample_rate> -ac <achannels>
# <aparams>
# -f <oformat>
# -y <output>
engine example {
# whether the engine is enabled
# default: off.
enabled on;
# input format, "ffmpeg -i", can be:
# off, do not specifies the format, ffmpeg will guess it.
# flv, for flv or RTMP stream.
# other format, for example, mp4/aac whatever.
# pre-file options, before "-i"
perfile {
re;
rtsp_transport tcp;
}
# input format "-i", can be:
# off, do not specifies the format, ffmpeg will guess it.
# flv, for flv or RTMP stream.
# other format, for example, mp4/aac whatever.
# default: flv
iformat flv;
# ffmpeg filters, between "-i" and "-vcodec"
Expand Down
43 changes: 39 additions & 4 deletions trunk/src/app/srs_app_config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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";
Expand Down Expand Up @@ -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());
}

Expand Down Expand Up @@ -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());
}

Expand Down Expand Up @@ -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());
}

Expand Down
4 changes: 4 additions & 0 deletions trunk/src/app/srs_app_config.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -976,6 +976,10 @@ class SrsConfig
* 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
*/
Expand Down
12 changes: 12 additions & 0 deletions trunk/src/app/srs_app_ffmpeg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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");
Expand Down
1 change: 1 addition & 0 deletions trunk/src/app/srs_app_ffmpeg.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ class SrsFFMPEG
private:
std::string ffmpeg;
std::string _iparams;
std::vector<std::string> perfile;
std::string iformat;
std::string input;
std::vector<std::string> vfilter;
Expand Down
2 changes: 1 addition & 1 deletion trunk/src/core/srs_core.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down

0 comments on commit 4709d02

Please sign in to comment.