mirror of
https://gitee.com/xia-chu/ZLMediaKit.git
synced 2026-05-06 10:57:50 +08:00
fix: 解决h265多Tile编码时,只有左侧画面,右侧画面灰色图的问题 (#4699)
推流H265 RTMP,播放 webrtc,左半边画面正常,右半边画面是灰度图。 原因: FUA打包的M错误导致组帧有问题,播放侧只解码了左边的Tile,右边灰度图背景。 进一步分析推的H265视频 为双Tile左右布局,Webrtc分为两个NALU传输的,H265RtpEncoder::packRtpFu里将两个NALU的RTP包的M标记都标记为1------ 这个是错误的,这个M标记是帧结束的标记,而不是NALU结束的标记。也就是说只需要将帧的最后一个NALU的最后一个RTP包的M置1。
This commit is contained in:
parent
435dcbcbbf
commit
d75d35dc7a
@ -289,7 +289,7 @@ void H265RtpEncoder::packRtpFu(const char *ptr, size_t len, uint64_t pts, bool i
|
|||||||
// Pass in nullptr first, do not copy the payload memory
|
// Pass in nullptr first, do not copy the payload memory
|
||||||
// 只有FU的最后一个分片且整个帧需要设置mark时才设置mark位
|
// 只有FU的最后一个分片且整个帧需要设置mark时才设置mark位
|
||||||
bool mark_bit = fu_end && is_mark;
|
bool mark_bit = fu_end && is_mark;
|
||||||
auto rtp = getRtpInfo().makeRtp(TrackVideo, nullptr, max_size + 3, mark_bit, pts);
|
auto rtp = getRtpInfo().makeRtp(TrackVideo, nullptr, max_size + 3, mark_bit && is_mark, pts); //yzw 帧(不是NALU,多TILE时一帧有多个NALU)最后一个rtp才设置mark位
|
||||||
// rtp payload 负载部分 [AUTO-TRANSLATED:03a5ef9b]
|
// rtp payload 负载部分 [AUTO-TRANSLATED:03a5ef9b]
|
||||||
// rtp payload load part
|
// rtp payload load part
|
||||||
uint8_t *payload = rtp->getPayload();
|
uint8_t *payload = rtp->getPayload();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user