alex
alex
RT, 那个分支有何不一样?看起来在事件循环有改动?应该使用master的还是这个分支的?
当使用拉流代理拉流的时候, resetWhenRePlay的作用其实很有限. 首先, 如果上游流断开了, 比如网络波动或者是拉取直播ts流, 特别是拉取ts流.一般都会每隔几分钟断开一次的, 因为当前读取数据上游下发并不是平滑的, 这点很容易验证, 比如使用ffmpeg输出一个ts流, 直接拉取. 所以当读取数据速度很快时, 上游没有新数据产生就会因为读取到0字节而断开. 但是其实这是不应该的, 因为流并不是正常终止, 后续还有数据的. 可是这时候就会重新拉流, 重建TsPlayer, 那么对应的HlsDemuxer也会析构, 而HlsDemuxer中是平滑处理流的, 最大缓存30秒. 这时候HlsDemuxer析构了, 那么就会丢失最大30秒的缓存流. 接下去会触发MpegMuxer::resetTracks() 写入一个空包后,会清空FrameMerger的cache, 这又会丢失一些packet. 这样操作虽然客户端是不会立即断开, 但是很大程度上会导致一些客户端没办法继续正常播放下去了. 直接使用ffmpeg的客户端还好, 卡住后会继续播放.但是有时会出现音画不同步. 如果是android系统,...
今天部署了最新版的代码, 到现在8个小时, 已经崩溃了4次. dmesg日志 event poller 16[15269]: segfault at 200000009 ip 0000560be2957da0 sp 00007fe68f3fbb80 error 4 in media_server[560be25a6000+516000] root@lax:/opt/media# addr2line -e media_server 3b1da0 -f -a -p -C 0x00000000003b1da0: std::_Sp_counted_ptr_inplace::~_Sp_counted_ptr_inplace() at...
如果服务器上负载流数量很多, 从日志根本就没办法分辨出来问题.特别是查找哪路拉流或者推送流出现问题时, 日志基本上帮助并不大. 能否按照流来区分日志?比如多个日志文件?或者是在日志中标识出来. 比如我遇到的 ``` 2021-12-24 19:39:49.015 W media_server[10643-event poller 0] TsMuxer.cpp:118 inputFrame | 必须提供adts头才能mpeg-ts打包 2021-12-24 19:39:49.015 W media_server[10643-event poller 0] TsMuxer.cpp:118 inputFrame | 必须提供adts头才能mpeg-ts打包 2021-12-24 19:39:49.096 W media_server[10643-event...
我发现你推荐的EPG, 第一个收费的, 剩余的对咱们用处不大, 所以我这里贡献一个 https://epg.pm 大概上面2000来个频道的EPG吧, 页面下方有一个xmltv的接口, 每天更新一周节目预告.
sdt写入的问题
``` if (0 == tsctx->sdt_period) { // SDT tsctx->sdt_period = dts; n = sdt_write(&tsctx->pat, tsctx->payload); r = mpeg_ts_write_section_header(ts, TS_PID_SDT, &tsctx->pat.cc /*fixme*/ , tsctx->payload, n); if (0 != r) return r;...
大佬, 昨天到今天出现了两次崩溃, 堆栈如下. 目前没办法定位到具体是什么流导致的崩溃. ``` ## crash date:2022-04-07 16:06:11 ## exe: media_server ## signal: 11 ## stack: [0]: ./media_server(+0x2d22d4) [0x55a0f53d52d4] ?? ??:0 [1]: /lib/x86_64-linux-gnu/libc.so.6(+0x3ef10) [0x7fd66f7bef10] ?? ??:0 [2]: ./media_server(pmt_read+0xa6) [0x55a0f566f6f6]...
因为没办法准确判断关键帧, 所以我尝试使用ffmpeg来解封装成AVPacket 然后在调用您的库写入hls或者mpeg_ts. 但是现在有一个很棘手的问题就是, 生成的文件播放时会花屏. 这个我觉得应该是dts的问题 ``` AVRational time_base = {1,90000}; pkt->dts = (AV_NOPTS_VALUE == pkt->dts ? pkt->pts : pkt->dts); pkt->pts = (AV_NOPTS_VALUE == pkt->pts ? pkt->dts : pkt->pts); pkt->dts...
丢弃不完整的帧
当做拉取hls转ts流的时候, 如果遇到拉取hls分片超时, 那么最终输出的ts流, 在播放器里面就会卡住. 因为解码失败, 实际上就是这个问题https://github.com/ZLMediaKit/ZLMediaKit/issues/1348 能否增加一个接口, 判断输出的帧是否完整?如果不完整就可以选择丢弃.
测试编译出错
../libflv/test/http-flv-live.cpp:217:68: error: invalid conversion from ‘void (*)(void*, const uint8_t*, int) {aka void (*)(void*, const unsigned char*, int)}’ to ‘void (*)(void*, const uint8_t*, size_t) {aka void (*)(void*, const unsigned char*, long...