Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
srs
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
winlin
2015-02-10 22:37:29 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
87519aaae835199e5adb60c0ae2c1cd24939448c
87519aaa
1 parent
66931a88
fix the avc codec bug, the ibmf format may like the annexb, we must guess only one time. 2.0.114
隐藏空白字符变更
内嵌
并排对比
正在显示
3 个修改的文件
包含
48 行增加
和
10 行删除
trunk/src/core/srs_core.hpp
trunk/src/kernel/srs_kernel_codec.cpp
trunk/src/kernel/srs_kernel_codec.hpp
trunk/src/core/srs_core.hpp
查看文件 @
87519aa
...
...
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// current release version
#define VERSION_MAJOR 2
#define VERSION_MINOR 0
#define VERSION_REVISION 11
3
#define VERSION_REVISION 11
4
// server info.
#define RTMP_SIG_SRS_KEY "SRS"
...
...
trunk/src/kernel/srs_kernel_codec.cpp
查看文件 @
87519aa
...
...
@@ -199,6 +199,7 @@ SrsAvcAacCodec::SrsAvcAacCodec()
pictureParameterSetLength
=
0
;
pictureParameterSetNALUnit
=
NULL
;
payload_format
=
SrsAvcPayloadFormatGuess
;
stream
=
new
SrsStream
();
}
...
...
@@ -469,20 +470,42 @@ int SrsAvcAacCodec::video_avc_demux(char* data, int size, SrsCodecSample* sample
srs_error
(
"avc decode failed, sequence header not found. ret=%d"
,
ret
);
return
ret
;
}
// One or more NALUs (Full frames are required)
// try "AnnexB" from H.264-AVC-ISO_IEC_14496-10.pdf, page 211.
if
((
ret
=
avc_demux_annexb_format
(
stream
,
sample
))
!=
ERROR_SUCCESS
)
{
// stop try when system error.
if
(
ret
!=
ERROR_HLS_AVC_TRY_OTHERS
)
{
srs_error
(
"avc demux for annexb failed. ret=%d"
,
ret
);
return
ret
;
// guess for the first time.
if
(
payload_format
==
SrsAvcPayloadFormatGuess
)
{
// One or more NALUs (Full frames are required)
// try "AnnexB" from H.264-AVC-ISO_IEC_14496-10.pdf, page 211.
if
((
ret
=
avc_demux_annexb_format
(
stream
,
sample
))
!=
ERROR_SUCCESS
)
{
// stop try when system error.
if
(
ret
!=
ERROR_HLS_AVC_TRY_OTHERS
)
{
srs_error
(
"avc demux for annexb failed. ret=%d"
,
ret
);
return
ret
;
}
// try "ISO Base Media File Format" from H.264-AVC-ISO_IEC_14496-15.pdf, page 20
if
((
ret
=
avc_demux_ibmf_format
(
stream
,
sample
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
else
{
payload_format
=
SrsAvcPayloadFormatIbmf
;
srs_info
(
"hls guess avc payload is ibmf format."
);
}
}
else
{
payload_format
=
SrsAvcPayloadFormatAnnexb
;
srs_info
(
"hls guess avc payload is annexb format."
);
}
}
else
if
(
payload_format
==
SrsAvcPayloadFormatIbmf
)
{
// try "ISO Base Media File Format" from H.264-AVC-ISO_IEC_14496-15.pdf, page 20
if
((
ret
=
avc_demux_ibmf_format
(
stream
,
sample
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
srs_info
(
"hls decode avc payload in ibmf format."
);
}
else
{
// One or more NALUs (Full frames are required)
// try "AnnexB" from H.264-AVC-ISO_IEC_14496-10.pdf, page 211.
if
((
ret
=
avc_demux_annexb_format
(
stream
,
sample
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
srs_info
(
"hls decode avc payload in annexb format."
);
}
}
else
{
// ignored.
...
...
trunk/src/kernel/srs_kernel_codec.hpp
查看文件 @
87519aa
...
...
@@ -359,6 +359,18 @@ public:
};
/**
* the avc payload format, must be ibmf or annexb format.
* we guess by annexb first, then ibmf for the first time,
* and we always use the guessed format for the next time.
*/
enum
SrsAvcPayloadFormat
{
SrsAvcPayloadFormatGuess
=
0
,
SrsAvcPayloadFormatAnnexb
,
SrsAvcPayloadFormatIbmf
,
};
/**
* the h264/avc and aac codec, for media stream.
*
* to demux the FLV/RTMP video/audio packet to sample,
...
...
@@ -404,6 +416,9 @@ public:
char
*
sequenceParameterSetNALUnit
;
u_int16_t
pictureParameterSetLength
;
char
*
pictureParameterSetNALUnit
;
private
:
// the avc payload format.
SrsAvcPayloadFormat
payload_format
;
public
:
/**
* audio specified
...
...
请
注册
或
登录
后发表评论