fix #145, refine ffmpeg log, check abitrate for libaacplus. 0.9.186.
正在显示
3 个修改的文件
包含
44 行增加
和
22 行删除
@@ -207,7 +207,8 @@ Supported operating systems and hardware: | @@ -207,7 +207,8 @@ Supported operating systems and hardware: | ||
207 | * 2013-10-17, Created.<br/> | 207 | * 2013-10-17, Created.<br/> |
208 | 208 | ||
209 | ## History | 209 | ## History |
210 | -* v1.0, 2014-08-02, fix [#143](https://github.com/winlinvip/simple-rtmp-server/issues/143), fix retrieve sys stat bug for all linux. 0.9.185. | 210 | +* v1.0, 2014-08-03, fix [#145](https://github.com/winlinvip/simple-rtmp-server/issues/145), refine ffmpeg log, check abitrate for libaacplus. 0.9.186. |
211 | +* v1.0, 2014-08-03, fix [#143](https://github.com/winlinvip/simple-rtmp-server/issues/143), fix retrieve sys stat bug for all linux. 0.9.185. | ||
211 | * v1.0, 2014-08-02, fix [#138](https://github.com/winlinvip/simple-rtmp-server/issues/138), fix http hooks bug, regression bug. 0.9.184. | 212 | * v1.0, 2014-08-02, fix [#138](https://github.com/winlinvip/simple-rtmp-server/issues/138), fix http hooks bug, regression bug. 0.9.184. |
212 | * v1.0, 2014-08-02, fix [#142](https://github.com/winlinvip/simple-rtmp-server/issues/142), fix tcp stat slow bug, use /proc/net/sockstat instead, refer to 'ss -s'. 0.9.183. | 213 | * v1.0, 2014-08-02, fix [#142](https://github.com/winlinvip/simple-rtmp-server/issues/142), fix tcp stat slow bug, use /proc/net/sockstat instead, refer to 'ss -s'. 0.9.183. |
213 | * v1.0, 2014-07-31, fix [#141](https://github.com/winlinvip/simple-rtmp-server/issues/141), support tun0(vpn network device) ip retrieve. 0.9.179. | 214 | * v1.0, 2014-07-31, fix [#141](https://github.com/winlinvip/simple-rtmp-server/issues/141), support tun0(vpn network device) ip retrieve. 0.9.179. |
@@ -41,14 +41,15 @@ using namespace std; | @@ -41,14 +41,15 @@ using namespace std; | ||
41 | 41 | ||
42 | #ifdef SRS_AUTO_FFMPEG | 42 | #ifdef SRS_AUTO_FFMPEG |
43 | 43 | ||
44 | -#define SRS_RTMP_ENCODER_COPY "copy" | ||
45 | -#define SRS_RTMP_ENCODER_NO_VIDEO "vn" | ||
46 | -#define SRS_RTMP_ENCODER_NO_AUDIO "an" | 44 | +#define SRS_RTMP_ENCODER_COPY "copy" |
45 | +#define SRS_RTMP_ENCODER_NO_VIDEO "vn" | ||
46 | +#define SRS_RTMP_ENCODER_NO_AUDIO "an" | ||
47 | // only support libx264 encoder. | 47 | // only support libx264 encoder. |
48 | -#define SRS_RTMP_ENCODER_VCODEC "libx264" | 48 | +#define SRS_RTMP_ENCODER_VCODEC "libx264" |
49 | // any aac encoder is ok which contains the aac, | 49 | // any aac encoder is ok which contains the aac, |
50 | // for example, libaacplus, aac, fdkaac | 50 | // for example, libaacplus, aac, fdkaac |
51 | -#define SRS_RTMP_ENCODER_ACODEC "aac" | 51 | +#define SRS_RTMP_ENCODER_ACODEC "aac" |
52 | +#define SRS_RTMP_ENCODER_LIBAACPLUS "libaacplus" | ||
52 | 53 | ||
53 | SrsFFMPEG::SrsFFMPEG(std::string ffmpeg_bin) | 54 | SrsFFMPEG::SrsFFMPEG(std::string ffmpeg_bin) |
54 | { | 55 | { |
@@ -173,6 +174,15 @@ int SrsFFMPEG::initialize_transcode(SrsConfDirective* engine) | @@ -173,6 +174,15 @@ int SrsFFMPEG::initialize_transcode(SrsConfDirective* engine) | ||
173 | } | 174 | } |
174 | } | 175 | } |
175 | 176 | ||
177 | + // @see, https://github.com/winlinvip/simple-rtmp-server/issues/145 | ||
178 | + if (acodec == SRS_RTMP_ENCODER_LIBAACPLUS) { | ||
179 | + if (abitrate < 16 || abitrate > 72) { | ||
180 | + ret = ERROR_ENCODER_ABITRATE; | ||
181 | + srs_error("invalid abitrate for aac: %d, must in [16, 72], ret=%d", abitrate, ret); | ||
182 | + return ret; | ||
183 | + } | ||
184 | + } | ||
185 | + | ||
176 | if (acodec != SRS_RTMP_ENCODER_COPY && acodec != SRS_RTMP_ENCODER_NO_AUDIO) { | 186 | if (acodec != SRS_RTMP_ENCODER_COPY && acodec != SRS_RTMP_ENCODER_NO_AUDIO) { |
177 | if (acodec.find(SRS_RTMP_ENCODER_ACODEC) == std::string::npos) { | 187 | if (acodec.find(SRS_RTMP_ENCODER_ACODEC) == std::string::npos) { |
178 | ret = ERROR_ENCODER_ACODEC; | 188 | ret = ERROR_ENCODER_ACODEC; |
@@ -182,20 +192,17 @@ int SrsFFMPEG::initialize_transcode(SrsConfDirective* engine) | @@ -182,20 +192,17 @@ int SrsFFMPEG::initialize_transcode(SrsConfDirective* engine) | ||
182 | } | 192 | } |
183 | if (abitrate <= 0) { | 193 | if (abitrate <= 0) { |
184 | ret = ERROR_ENCODER_ABITRATE; | 194 | ret = ERROR_ENCODER_ABITRATE; |
185 | - srs_error("invalid abitrate: %d, ret=%d", | ||
186 | - abitrate, ret); | 195 | + srs_error("invalid abitrate: %d, ret=%d", abitrate, ret); |
187 | return ret; | 196 | return ret; |
188 | } | 197 | } |
189 | if (asample_rate <= 0) { | 198 | if (asample_rate <= 0) { |
190 | ret = ERROR_ENCODER_ASAMPLE_RATE; | 199 | ret = ERROR_ENCODER_ASAMPLE_RATE; |
191 | - srs_error("invalid sample rate: %d, ret=%d", | ||
192 | - asample_rate, ret); | 200 | + srs_error("invalid sample rate: %d, ret=%d", asample_rate, ret); |
193 | return ret; | 201 | return ret; |
194 | } | 202 | } |
195 | if (achannels != 1 && achannels != 2) { | 203 | if (achannels != 1 && achannels != 2) { |
196 | ret = ERROR_ENCODER_ACHANNELS; | 204 | ret = ERROR_ENCODER_ACHANNELS; |
197 | - srs_error("invalid achannels, must be 1 or 2, actual %d, ret=%d", | ||
198 | - achannels, ret); | 205 | + srs_error("invalid achannels, must be 1 or 2, actual %d, ret=%d", achannels, ret); |
199 | return ret; | 206 | return ret; |
200 | } | 207 | } |
201 | } | 208 | } |
@@ -359,21 +366,21 @@ int SrsFFMPEG::start() | @@ -359,21 +366,21 @@ int SrsFFMPEG::start() | ||
359 | params.push_back("-y"); | 366 | params.push_back("-y"); |
360 | params.push_back(_output); | 367 | params.push_back(_output); |
361 | 368 | ||
369 | + std::string cli; | ||
362 | if (true) { | 370 | if (true) { |
363 | - int pparam_size = 8 * 1024; | ||
364 | - char* pparam = new char[pparam_size]; | ||
365 | - char* p = pparam; | ||
366 | - char* last = pparam + pparam_size; | ||
367 | for (int i = 0; i < (int)params.size(); i++) { | 371 | for (int i = 0; i < (int)params.size(); i++) { |
368 | std::string ffp = params[i]; | 372 | std::string ffp = params[i]; |
369 | - snprintf(p, last - p, "%s ", ffp.c_str()); | ||
370 | - p += ffp.length() + 1; | 373 | + cli += ffp; |
374 | + if (i < (int)params.size() - 1) { | ||
375 | + cli += " "; | ||
376 | + } | ||
371 | } | 377 | } |
372 | - srs_trace("start transcoder, log: %s, params: %s", | ||
373 | - log_file.c_str(), pparam); | ||
374 | - srs_freep(pparam); | 378 | + srs_trace("start ffmpeg, log: %s, params: %s", log_file.c_str(), cli.c_str()); |
375 | } | 379 | } |
376 | 380 | ||
381 | + // for log | ||
382 | + int cid = _srs_context->get_id(); | ||
383 | + | ||
377 | // TODO: fork or vfork? | 384 | // TODO: fork or vfork? |
378 | if ((pid = fork()) < 0) { | 385 | if ((pid = fork()) < 0) { |
379 | ret = ERROR_ENCODER_FORK; | 386 | ret = ERROR_ENCODER_FORK; |
@@ -392,6 +399,19 @@ int SrsFFMPEG::start() | @@ -392,6 +399,19 @@ int SrsFFMPEG::start() | ||
392 | srs_error("open encoder file %s failed. ret=%d", log_file.c_str(), ret); | 399 | srs_error("open encoder file %s failed. ret=%d", log_file.c_str(), ret); |
393 | return ret; | 400 | return ret; |
394 | } | 401 | } |
402 | + | ||
403 | + // log basic info | ||
404 | + if (true) { | ||
405 | + char buf[4096]; | ||
406 | + int pos = 0; | ||
407 | + pos += snprintf(buf + pos, sizeof(buf) - pos, "\n"); | ||
408 | + pos += snprintf(buf + pos, sizeof(buf) - pos, "ffmpeg cid=%d\n", cid); | ||
409 | + pos += snprintf(buf + pos, sizeof(buf) - pos, "log=%s\n", log_file.c_str()); | ||
410 | + pos += snprintf(buf + pos, sizeof(buf) - pos, "params: %s\n", cli.c_str()); | ||
411 | + ::write(log_fd, buf, pos); | ||
412 | + } | ||
413 | + | ||
414 | + // dup to stdout and stderr. | ||
395 | if (dup2(log_fd, STDOUT_FILENO) < 0) { | 415 | if (dup2(log_fd, STDOUT_FILENO) < 0) { |
396 | ret = ERROR_ENCODER_DUP2; | 416 | ret = ERROR_ENCODER_DUP2; |
397 | srs_error("dup2 encoder file failed. ret=%d", ret); | 417 | srs_error("dup2 encoder file failed. ret=%d", ret); |
@@ -402,6 +422,7 @@ int SrsFFMPEG::start() | @@ -402,6 +422,7 @@ int SrsFFMPEG::start() | ||
402 | srs_error("dup2 encoder file failed. ret=%d", ret); | 422 | srs_error("dup2 encoder file failed. ret=%d", ret); |
403 | return ret; | 423 | return ret; |
404 | } | 424 | } |
425 | + | ||
405 | // close log fd | 426 | // close log fd |
406 | ::close(log_fd); | 427 | ::close(log_fd); |
407 | // close other fds | 428 | // close other fds |
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
31 | // current release version | 31 | // current release version |
32 | #define VERSION_MAJOR "0" | 32 | #define VERSION_MAJOR "0" |
33 | #define VERSION_MINOR "9" | 33 | #define VERSION_MINOR "9" |
34 | -#define VERSION_REVISION "185" | 34 | +#define VERSION_REVISION "186" |
35 | #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION | 35 | #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION |
36 | // server info. | 36 | // server info. |
37 | #define RTMP_SIG_SRS_KEY "SRS" | 37 | #define RTMP_SIG_SRS_KEY "SRS" |
-
请 注册 或 登录 后发表评论