正在显示
2 个修改的文件
包含
18 行增加
和
12 行删除
@@ -39,8 +39,8 @@ int connect_oc(srs_rtmp_t ortmp); | @@ -39,8 +39,8 @@ int connect_oc(srs_rtmp_t ortmp); | ||
39 | 39 | ||
40 | #define RE_PULSE_MS 300 | 40 | #define RE_PULSE_MS 300 |
41 | int64_t re_create(); | 41 | int64_t re_create(); |
42 | -void re_update(int64_t re, u_int32_t time); | ||
43 | -void re_cleanup(int64_t re, u_int32_t time); | 42 | +void re_update(int64_t re, int32_t starttime, u_int32_t time); |
43 | +void re_cleanup(int64_t re, int32_t starttime, u_int32_t time); | ||
44 | 44 | ||
45 | int64_t tools_main_entrance_startup_time; | 45 | int64_t tools_main_entrance_startup_time; |
46 | int main(int argc, char** argv) | 46 | int main(int argc, char** argv) |
@@ -109,7 +109,7 @@ int main(int argc, char** argv) | @@ -109,7 +109,7 @@ int main(int argc, char** argv) | ||
109 | return ret; | 109 | return ret; |
110 | } | 110 | } |
111 | 111 | ||
112 | -int do_proxy(srs_flv_t flv, srs_rtmp_t ortmp, int64_t re, u_int32_t* ptimestamp) | 112 | +int do_proxy(srs_flv_t flv, srs_rtmp_t ortmp, int64_t re, int32_t* pstarttime, u_int32_t* ptimestamp) |
113 | { | 113 | { |
114 | int ret = 0; | 114 | int ret = 0; |
115 | 115 | ||
@@ -147,8 +147,12 @@ int do_proxy(srs_flv_t flv, srs_rtmp_t ortmp, int64_t re, u_int32_t* ptimestamp) | @@ -147,8 +147,12 @@ int do_proxy(srs_flv_t flv, srs_rtmp_t ortmp, int64_t re, u_int32_t* ptimestamp) | ||
147 | } | 147 | } |
148 | srs_lib_verbose("ortmp sent packet: type=%s, time=%d, size=%d", | 148 | srs_lib_verbose("ortmp sent packet: type=%s, time=%d, size=%d", |
149 | srs_type2string(type), *ptimestamp, size); | 149 | srs_type2string(type), *ptimestamp, size); |
150 | + | ||
151 | + if (*pstarttime < 0) { | ||
152 | + *pstarttime = *ptimestamp; | ||
153 | + } | ||
150 | 154 | ||
151 | - re_update(re, *ptimestamp); | 155 | + re_update(re, *pstarttime, *ptimestamp); |
152 | } | 156 | } |
153 | 157 | ||
154 | return ret; | 158 | return ret; |
@@ -158,6 +162,7 @@ int proxy(srs_flv_t flv, srs_rtmp_t ortmp) | @@ -158,6 +162,7 @@ int proxy(srs_flv_t flv, srs_rtmp_t ortmp) | ||
158 | { | 162 | { |
159 | int ret = 0; | 163 | int ret = 0; |
160 | u_int32_t timestamp = 0; | 164 | u_int32_t timestamp = 0; |
165 | + int32_t starttime = -1; | ||
161 | 166 | ||
162 | char header[13]; | 167 | char header[13]; |
163 | if ((ret = srs_flv_read_header(flv, header)) != 0) { | 168 | if ((ret = srs_flv_read_header(flv, header)) != 0) { |
@@ -169,10 +174,10 @@ int proxy(srs_flv_t flv, srs_rtmp_t ortmp) | @@ -169,10 +174,10 @@ int proxy(srs_flv_t flv, srs_rtmp_t ortmp) | ||
169 | 174 | ||
170 | int64_t re = re_create(); | 175 | int64_t re = re_create(); |
171 | 176 | ||
172 | - ret = do_proxy(flv, ortmp, re, ×tamp); | 177 | + ret = do_proxy(flv, ortmp, re, &starttime, ×tamp); |
173 | 178 | ||
174 | // for the last pulse, always sleep. | 179 | // for the last pulse, always sleep. |
175 | - re_cleanup(re, timestamp); | 180 | + re_cleanup(re, starttime, timestamp); |
176 | 181 | ||
177 | return ret; | 182 | return ret; |
178 | } | 183 | } |
@@ -223,23 +228,24 @@ int64_t re_create() | @@ -223,23 +228,24 @@ int64_t re_create() | ||
223 | 228 | ||
224 | return re; | 229 | return re; |
225 | } | 230 | } |
226 | -void re_update(int64_t re, u_int32_t time) | 231 | +void re_update(int64_t re, int32_t starttime, u_int32_t time) |
227 | { | 232 | { |
228 | // send by pulse algorithm. | 233 | // send by pulse algorithm. |
229 | int64_t now = srs_get_time_ms(); | 234 | int64_t now = srs_get_time_ms(); |
230 | - int64_t diff = time - (now -re); | 235 | + int64_t diff = time - starttime - (now -re); |
231 | if (diff > RE_PULSE_MS) { | 236 | if (diff > RE_PULSE_MS) { |
232 | usleep(diff * 1000); | 237 | usleep(diff * 1000); |
233 | } | 238 | } |
234 | } | 239 | } |
235 | -void re_cleanup(int64_t re, u_int32_t time) | 240 | +void re_cleanup(int64_t re, int32_t starttime, u_int32_t time) |
236 | { | 241 | { |
237 | // for the last pulse, always sleep. | 242 | // for the last pulse, always sleep. |
238 | // for the virtual live encoder long time publishing. | 243 | // for the virtual live encoder long time publishing. |
239 | int64_t now = srs_get_time_ms(); | 244 | int64_t now = srs_get_time_ms(); |
240 | - int64_t diff = time - (now -re); | 245 | + int64_t diff = time - starttime - (now -re); |
241 | if (diff > 0) { | 246 | if (diff > 0) { |
242 | - srs_lib_trace("re_cleanup sleep for the last pulse for %d ms", (int)diff); | 247 | + srs_lib_trace("re_cleanup, diff=%d, start=%d, last=%d ms", |
248 | + (int)diff, starttime, time); | ||
243 | usleep(diff * 1000); | 249 | usleep(diff * 1000); |
244 | } | 250 | } |
245 | } | 251 | } |
@@ -1159,7 +1159,7 @@ int __srs_write_h264_sps_pps(Context* context, u_int32_t dts, u_int32_t pts) | @@ -1159,7 +1159,7 @@ int __srs_write_h264_sps_pps(Context* context, u_int32_t dts, u_int32_t pts) | ||
1159 | 1159 | ||
1160 | // @see: Annex A Profiles and levels, H.264-AVC-ISO_IEC_14496-10.pdf, page 205 | 1160 | // @see: Annex A Profiles and levels, H.264-AVC-ISO_IEC_14496-10.pdf, page 205 |
1161 | // Baseline profile profile_idc is 66(0x42). | 1161 | // Baseline profile profile_idc is 66(0x42). |
1162 | - // Baseline profile profile_idc is 77(0x4d). | 1162 | + // Main profile profile_idc is 77(0x4d). |
1163 | // Extended profile profile_idc is 88(0x58). | 1163 | // Extended profile profile_idc is 88(0x58). |
1164 | u_int8_t profile_idc = frame[1]; | 1164 | u_int8_t profile_idc = frame[1]; |
1165 | //u_int8_t constraint_set = frame[2]; | 1165 | //u_int8_t constraint_set = frame[2]; |
-
请 注册 或 登录 后发表评论