ossrs/srs

`Caton Network Video Encoder` reports an error when pushing the stream to `SRSv2`, stating that the `sps` (Sequence Parameter Set) has an invalid `seq_scaling_matrix_present_flag`.

youngcow opened this issue · 5 comments

Using the Caton Network Video Encoder H.264 Realtime (Device Model: NVE901) encoder to push streams to SRSv2 failed, while SRSv1 is working fine.
The error message from SRSv2 is as follows:
[2015-06-30 10:26:44.911][trace][27970][5726] client identified, type=publish(FMLEPublish), stream_name=test, duration=-1.00
[2015-06-30 10:26:44.911][trace][27970][5726] out chunk size to 60000
[2015-06-30 10:26:44.911][trace][27970][5726] source url=/live/test, ip=client, cache=1, is_edge=0, source_id=-1[-1]
[2015-06-30 10:26:44.920][trace][27970][5724] input chunk size to 60000
[2015-06-30 10:26:44.953][trace][27970][5726] hls: win=20.00, frag=5.00, prefix=, path=/home/srs/live, m3u8=[app]/[stream].m3u8, ts=[app]/[stream]-[seq].ts, aof=2.00, floor=0, clean=1, waitk=1, dispose=0
[2015-06-30 10:26:45.172][trace][27970][5359] update source_id=5726[5726]
[2015-06-30 10:26:45.823][trace][27970][5727] got metadata, width=1920, height=1080
[2015-06-30 10:26:45.823][trace][27970][5727] 4B audio sh, codec(10, profile=LC, 2channels, 0kbps, 48000HZ), flv(16bits, 2channels, 44100HZ)
[2015-06-30 10:26:45.823][error][27970][5727][11] sps the seq_scaling_matrix_present_flag invalid. ret=3001(Resource temporarily unavailable)
[2015-06-30 10:26:45.823][error][27970][5727][11] hls codec demux video failed. ret=3001(Resource temporarily unavailable)
[2015-06-30 10:26:45.823][warn][27970][5727][11] hls process video message failed, ignore and disable hls. ret=3001
[2015-06-30 10:26:45.823][trace][27970][5727] unpublish drop ts segment, sequence_no=0, uri=test-0.ts, duration=0.00, start=0
[2015-06-30 10:26:45.823][warn][27970][5727][2] ignore unlink path failed, file=/home/srs/live/live/test-0.ts.tmp.
[2015-06-30 10:26:45.823][error][27970][5727][2] rename m3u8 file failed. /home/srs/live/live/test.m3u8.temp => /home/srs/live/live/test.m3u8, ret=3004(No such file or directory)
[2015-06-30 10:26:45.823][error][27970][5727][2] refresh m3u8 failed. ret=3004(No such file or directory)
[2015-06-30 10:26:45.823][error][27970][5727][2] ignore m3u8 muxer flush/close audio failed. ret=3004(No such file or directory)
[2015-06-30 10:26:45.823][error][27970][5727][2] sps the seq_scaling_matrix_present_flag invalid. ret=3001(No such file or directory)
[2015-06-30 10:26:45.823][error][27970][5727][2] source codec demux video failed. ret=3001(No such file or directory)
[2015-06-30 10:26:45.823][error][27970][5727][2] source process video message failed. ret=3001(No such file or directory)
[2015-06-30 10:26:45.823][error][27970][5727][2] fmle process publish message failed. ret=3001(No such file or directory)
[2015-06-30 10:26:45.823][error][27970][5727][2] thread process message failed. ret=3001(No such file or directory)
[2015-06-30 10:26:45.823][warn][27970][5727][2] thread recv cycle failed, ignored and retry, ret=3001
[2015-06-30 10:26:45.823][error][27970][5726][2] recv thread failed. ret=3001(No such file or directory)
[2015-06-30 10:26:45.823][trace][27970][5726] cleanup when unpublish
[2015-06-30 10:26:45.823][error][27970][5726][2] stream service cycle failed. ret=3001(No such file or directory)
[2015-06-30 10:26:45.837][trace][27970][5729] RTMP client ip=client
[2015-06-30 10:26:45.841][trace][27970][5729] simple handshake success.
[2015-06-30 10:26:45.841][trace][27970][5729] input chunk size to 1024
[2015-06-30 10:26:45.842][trace][27970][5729] connect app, tcUrl=rtmp://server:1950/live, pageUrl=, swfUrl=rtmp://server:1950/live, schema=rtmp, vhost=defaultVhost, port=1950, app=live, args=null
[2015-06-30 10:26:45.845][trace][27970][5729] client identified, type=publish(FMLEPublish), stream_name=test, duration=-1.00
[2015-06-30 10:26:45.845][trace][27970][5729] out chunk size to 60000
[2015-06-30 10:26:45.845][trace][27970][5729] source url=/live/test, ip=client, cache=1, is_edge=0, source_id=-1[-1]
[2015-06-30 10:26:45.883][trace][27970][5729] hls: win=20.00, frag=5.00, prefix=, path=/home/srs/live, m3u8=[app]/[stream].m3u8, ts=[app]/[stream]-[seq].ts, aof=2.00, floor=0, clean=1, waitk=1, dispose=0
[2015-06-30 10:26:46.172][trace][27970][5359] update source_id=5729[5729]

TRANS_BY_GPT3

The translation to English is: 'The error is:
[2015-06-30 10:26:45.823][error][27970][5727][11] sps the seq_scaling_matrix_present_flag invalid. ret=3001(Resource temporarily unavailable)

The translation to English is:
'There was an error while parsing the sps, you may need to push the stream to my server, I need to debug it.

TRANS_BY_GPT3

The recorded file has been uploaded to the cloud storage, link: http://pan.baidu.com/s/1pJj3lB9 Password: h4qp

TRANS_BY_GPT3

The problem reoccurred when using recorded flv for streaming, it is an issue with parsing sps.

[2015-07-01 13:23:22.726][trace][15306][111] 4B audio sh, codec(10, profile=LC, 2channels, 0kbps, 48000HZ), flv(16bits, 2channels, 44100HZ)
[2015-07-01 13:23:22.726][error][15306][111][35] sps the seq_scaling_matrix_present_flag invalid. ret=3001(Resource temporarily unavailable)
[2015-07-01 13:23:22.726][error][15306][111][35] source codec demux video failed. ret=3001(Resource temporarily unavailable)
[2015-07-01 13:23:22.726][error][15306][111][35] source process video message failed. ret=3001(Resource temporarily unavailable)
[2015-07-01 13:23:22.726][error][15306][111][35] fmle process publish message failed. ret=3001(Resource temporarily unavailable)
[2015-07-01 13:23:22.726][error][15306][111][35] thread process message failed. ret=3001(Resource temporarily unavailable)
[2015-07-01 13:23:22.726][warn][15306][111][35] thread recv cycle failed, ignored and retry, ret=3001
[2015-07-01 13:23:22.726][error][15306][108][35] recv thread failed. ret=3001(Resource temporarily unavailable)
[2015-07-01 13:23:22.726][trace][15306][108] cleanup when unpublish
[2015-07-01 13:23:22.726][error][15306][108][35] stream service cycle failed. ret=3001(Resource temporarily unavailable)

The data is as follows:

(lldb) p nb_rbsp
(int) $0 = 55
(lldb) x/55xb rbsp
0x1010004c0: 0x64 0x00 0x29 0xad 0x00 0xce 0x50 0x1e
0x1010004c8: 0x00 0x89 0xf9 0x70 0x11 0x00 0x00 0x0e
0x1010004d0: 0x10 0x00 0x02 0xbf 0x20 0xe0 0x00 0x00
0x1010004d8: 0x02 0xfa 0xf0 0x80 0x00 0x01 0xdc 0xd6
0x1010004e0: 0x52 0x2f 0x7e 0x30 0x00 0x00 0x01 0x7d
0x1010004e8: 0x78 0x40 0x00 0x00 0xee 0x6b 0x29 0x17
0x1010004f0: 0xbf 0x06 0xd0 0x44 0x22 0x52 0xc0

Revise this analysis according to the h264 standard.

if( seq_scaling_matrix_present_flag )
    for(i=0;i<((chroma_format_idc != 3)?8:12);i++){
        seq_scaling_list_present_flag[ i ]
        if( seq_scaling_list_present_flag[ i ] )

The parameters are as follows:

(lldb) p/x seq_scaling_matrix_present_flag
(int8_t) $15 = 0x01
(lldb) p chroma_format_idc
(int32_t) $16 = 1

TRANS_BY_GPT3

The parsed width and height are:

(lldb) p width
(int) $38 = 2560
(lldb) p height
(int) $39 = 1536

TRANS_BY_GPT3

It seems to be 1920x1080, but let's not worry about it for now.

TRANS_BY_GPT3