media-server icon indicating copy to clipboard operation
media-server copied to clipboard

pmt_read崩溃

Open alexliyu7352 opened this issue 3 years ago • 4 comments

大佬, 昨天到今天出现了两次崩溃, 堆栈如下. 目前没办法定位到具体是什么流导致的崩溃.

## 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]
??
??:0

[3]: ./media_server(ts_demuxer_input+0x659) [0x55a0f566c409]
??
??:0

[4]: ./media_server(_ZN8mediakit9TSSegment12onRecvHeaderEPKcm+0x5b) [0x55a0f55f68ab]
??
??:0

[5]: ./media_server(_ZN8mediakit19HttpRequestSplitter5inputEPKcm+0x101) [0x55a0f5478a51]
??
??:0

[6]: ./media_server(_ZN8mediakit9TSDecoder5inputEPKhm+0x86) [0x55a0f55f6a46]
??
??:0

[7]: ./media_server(_ZN8mediakit12HlsPlayerImp8onPacketEPKcm+0x62) [0x55a0f55e9472]
??
??:0

[8]: ./media_server(_ZN8mediakit9HlsPlayer12checkPrePlayEf+0x220) [0x55a0f55e8ca0]
??
??:0

[9]: ./media_server(+0x4e5f05) [0x55a0f55e8f05]
??
??:0

[10]: ./media_server(_ZN8mediakit12HttpTSPlayer14emitOnCompleteERKN7toolkit13SockExceptionE+0x23) [0x55a0f55ee973]
??
??:0

[11]: ./media_server(_ZN8mediakit10HttpClient21onResponseCompleted_lERKN7toolkit13SockExceptionE+0x9a) [0x55a0f54624ea]
??
??:0

[12]: ./media_server(+0x508390) [0x55a0f560b390]
??
??:0

[13]: ./media_server(+0x5005af) [0x55a0f56035af]
??
??:0

[14]: ./media_server(_ZN7toolkit11EventPoller7async_lESt8functionIFvvEEbb+0x4e) [0x55a0f561eeae]
??
??:0

[15]: ./media_server(_ZN7toolkit11EventPoller5asyncESt8functionIFvvEEb+0x60) [0x55a0f561f370]
??
??:0

[16]: ./media_server(_ZN7toolkit6Socket7emitErrERKNS_13SockExceptionE+0x1b6) [0x55a0f5606656]
??
??:0

[17]: ./media_server(_ZN7toolkit6Socket6onReadERKSt10shared_ptrINS_6SockFDEEb+0x33a) [0x55a0f5603fca]
??
??:0

[18]: ./media_server(+0x502bb9) [0x55a0f5605bb9]
??
??:0

[19]: ./media_server(_ZN7toolkit11EventPoller7runLoopEbb+0x66f) [0x55a0f562167f]
??
??:0

[20]: /usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0xbd6df) [0x7fd66fe466df]
??
??:0

[21]: /lib/x86_64-linux-gnu/libpthread.so.0(+0x76db) [0x7fd670b0a6db]
??
??:0

[22]: /lib/x86_64-linux-gnu/libc.so.6(clone+0x3f) [0x7fd66f8a161f]
??
??:0

alexliyu7352 avatar Apr 07 '22 08:04 alexliyu7352

从代码中未发现明显问题,加了些边界条件判断,可以更新后试试。

ireader avatar Apr 09 '22 12:04 ireader

感谢大佬, 问下MPEG_LIVING_VIDEO_FRAME_DEMUX 是做什么用的?

何种情况下, 我需要使用MPEG_LIVING_VIDEO_FRAME_DEMUX

Chen @.***> 于2022年4月9日周六 20:22写道:

从代码中未发现明显问题,加了些边界条件判断,可以更新后试试。

— Reply to this email directly, view it on GitHub https://github.com/ireader/media-server/issues/211#issuecomment-1093974755, or unsubscribe https://github.com/notifications/unsubscribe-auth/AF3RPRPDZUFWQGWWBJPLVALVEFZARANCNFSM5SYSC7UQ . You are receiving this because you authored the thread.Message ID: @.***>

alexliyu7352 avatar Apr 09 '22 19:04 alexliyu7352

默认情况下:音频按照pes中的长度分帧,其它视频(264/265之外)根据pts/dts时间戳分帧。

默认策略下,视频帧会引入一帧延迟(需要等下一帧数据,判断dts差别),如果定义了MPEG_LIVING_VIDEO_FRAME_DEMUX ,可以降低延迟。

ireader avatar Apr 10 '22 01:04 ireader

H.264/H.265分支主要实现了2个功能:

  1. 根据Access Unit判断帧边界(国内安防行业某些企业的流)
  2. 去除AUD Unit

你可以测试下注释pes_packet函数中,264、265判断逻辑:

int pes_packet(struct packet_t* pkt, const struct pes_t* pes, const void* data, size_t size, int start, pes_packet_handler handler, void* param)
{
    int r;

    if (0 && (PSI_STREAM_H264 == pes->codecid || PSI_STREAM_H265 == pes->codecid))

ireader avatar Apr 10 '22 01:04 ireader