TestPattern error

目前三个问题:
1.支持多路
—2.延时进度条减少时,花屏h264已解决 h265
—3.延时进度条拉大时,h264视频缓存不够,视频跟不上音频
–4.做成一个服务 改变分辨率和帧率,重启问题
–5.考虑正在码流探测时,停止推流的情况,码流探测可长时间阻塞
6.开始和结束推流配置文件会有。无推流时显示彩条
—8.支持port和-d输入
9分辨率和帧率可改
10出奇偶场 帧率和分辨率变换
–11内存泄露,释放掉多余的内存池 连接
12网络丢包带来的花屏,修改ffmpeg源码模拟工具

汇聚延时2s 测试2M码流
抖动:sudo tc qdisc add dev enp1s0 root netem delay 1000ms 600ms
断流时长超过250ms 偶尔有马赛克
抖动:sudo tc qdisc add dev enp1s0 root netem delay 1000ms 500ms
断流时长250测试ing
sudo tc qdisc add dev enp1s0 root netem delay 200ms 50ms
sudo tc qdisc del dev enp1s0 root

ScheduledPlaybackHasStopped主要这个函数还没有被调用

kill -9不会回收资源
kill -15杀死TestPattern会回收socket资源

帧同步:sea,h264/265都有这个。
帧对齐:ref

tcp是握手,udp传输,所以检测的时候得重新建立一次连接才能检测到
sudo tcpdump -i enp7s0 -nnn tcp port 50000

传输丢包是只真实丢了的包
业务丢包是指传输过程中丢了的但又重传的包

没有预回滚,音频走不动,视频能走动
对于小的decklin卡
全* 0: one sub-device full-duplex
则0和1口可以采集和播放 3和4采集和播放都不行

0和1改为0: one sub-device full-duplex
2和3改为 1: two sub-devices half-duplex
则4个口全可以采集和播放
大的decklin卡应全部执行./ActivateProfile -d 0 -p 3

音频从1428000,开始到1529760(经过几秒),又从900000开始,视频直接从900000开始。

livepush给接收机推流的还有一个从背包收流的
i9 一路 top 90 华为盒子出1080i50 15M h265 28帧-47帧但是很稳定 ±1帧
i9 一路 top 90 华为盒子出1080p50 15M h265 57帧-97帧但是很稳定 ±2帧
i9 一路 top 90 华为盒子出720p50 15M h265 64帧-92帧但是很稳定 ±3帧

ps -aux | grep udp
/home/deviser/App-fusion/app/build
gdb recvd
r

ffmpeg -i ‘/home/yqw/下载/deviser.jpg’ -s 1920x1080 -pix_fmt uyvy422 deviser_yuv.yuv
ffplay -video_size 3840x2160 -pixel_format uyvy422 deviser_yuv_3840x2160.yuv

输入1280x720 用decklink可以播成1920x1080
1920x1080可以转换成2160x3840
但1280x720无法转换成2160x3840
[buffer @ 0x7f1e3cb0cb00] Unable to parse option value “0x0” as image size
[buffer @ 0x7f1e3cb0cb00] Unable to parse option value “0x0” as image size
[buffer @ 0x7f1e3cb0cb00] Error setting option video_size to value 0x0.

discardcorrupt加了这个之后,nobuffer没有明显效果了
—是这周完成的
h264第一帧是I帧 h265第一帧不一定是I帧
av_read_frame和av_format_open_input都是无限时间阻塞
配置环境
志强4路解码,线程10/20都不行,不均衡,导致单个线程个位数,视频解码跟不上,音视频不同步。存在内存泄露问题。
I9上线程10负载均衡
Gitee内存泄露,一下午变5个G了

[hevc @ 0x7faff41aa6c0] CABAC_MAX_BIN : 7
[hevc @ 0x7faff41aa6c0] The cu_qp_delta -1094995529 is outside the valid range [-26, 25].
avformat_find_stream_info特性:只有执行过av_format_open_input后才能执行,不能多次执行,除非avformat_close_input后,再次av_format_open_input后才能再次执行。
1080的12M,3840x2160 25M->36M
3840x2160p50 7M,无抖动情况,视频queue 30~50帧 音视频不同步

h265 1080p50 12M之前看看会不会卡顿
h265 2160x3840 36M之前看看会不会卡顿,做相应的处理
TestPattern_filter_no_30 两个按钮都没问题 看看抖动的问题 h264也有视频跟不上的问题,和最终版一样,最终版似乎是视频过大也是h264。

avcodec_send_packet() 多次发送 NULL 并不会导致解码器中缓存的帧丢失,使用 avcodec_flush_buffers() 可以立即丢掉解码器中缓存帧。因此播放完毕时应 avcodec_send_packet(NULL) 来取完缓存的帧,而 SEEK 操作或切换流时应调用 avcodec_flush_buffers() 来直接丢弃缓存帧

Prediction is not allowed in AAC-LC
1080p50 h265
第一帧视频进出编码器之间隔了8帧音频
视频编码器进10帧视频才开始出,音频不缓存

av_buffer_unref 内存泄露应该出现在这里,这个函数应该只能减引用不能销毁结构体空间
int av_packet_ref(AVPacket *dst, const AVPacket *src);

/*
对 packet 做拷贝操作,将 src 拷贝到 dst。
如果 src 是引用计数的,那么 dst 将会引用 src 中的数据,使其引用计数加 1 。
如果 src 不是引用计数的,那么会在 dst 中分配一个新的内存,然后将 src 中的数据拷贝过去。dst 其他的字段均拷贝自 src。
返回值:成功时返回0,失败时返回一个负数的AVERROR。
*/

原文链接:https://blog.csdn.net/qq_34305316/article/details/106317711
AVPacket *av_packet_alloc(void);

/*
分配一个AVPacket结构体,并将其字段设置为默认值。分配生成的结构体必须使用 av_packet_free()释放。
返回值:成功返回一个AVPacket结构体,失败返回NULL
注意:这个函数仅分配AVPacket本身,并不包括其内部的数据缓存区。相关的数据缓存区必须通过其他的方式来分配,如 av_new_packet 函数。
*/
————————————————
版权声明:本文为CSDN博主「H&A」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34305316/article/details/106317711

3840x2160 p50 h265 播放20分钟后自动崩掉
[hevc @ 0x7f36c010e140] Duplicate POC in a sequence: 116083.
[hevc @ 0x7f36c010e140] Error parsing NAL unit #2.
encode send error = -1094995529
@@@Invalid data found when processing input@@@

1080p50 h265 开启偶尔报错:
encode send error = -1094995529
@@@Invalid data found when processing input@@@

3840x2160
[hevc @ 0x2356a80] Could not find ref with POC 8
[hevc @ 0x2356a80] Could not find ref with POC 12
[hevc @ 0x2356a80] Could not find ref with POC 16
[hevc @ 0x2396440] The cu_qp_delta 73 is outside the valid range [-26, 25].

[decklink @ 0x23d3fc0] There are not enough buffered video frames. Video may misbehave!
[decklink @ 0x23d3fc0] There’s no buffered audio. Audio will misbehave!

[hevc @ 0x7f412815c540] The cu_qp_delta -32 is outside the valid range [-26, 25].

20000 400s 1080p50 TestPattern_17

Socio.1000
1080i50 1080i60有逐行

硬件方式:视频分辨率转换和视频编码方式转换会黑其他的不黑
码率改变不蹦

h265 8M 4k top
h264/1080p50 声音无延时 ffplay没有 视频还有些卡顿 考虑是主频问题
h265/1080p50 有延时

推流端停止推流
但TestPattern没有崩
推流端再启动后报错:
[hevc @ 0x7f05d4070e80] Duplicate POC in a sequence: 16422.
[hevc @ 0x7f05d4070e80] Error parsing NAL unit #2.
encode send error = -1094995529
@@@Invalid data found when processing input@@@//

[mpegts @ 0x7f77740027c0] PES packet size mismatch
[mpegts @ 0x7f77740027c0] Packet corrupt (stream = 1, dts = 84151592).
read_time:126
[h264 @ 0x7f7774022c00] error while decoding MB 64 29, bytestream -6
againV
read_time:3
[aac @ 0x7f777402e780] decode_band_types: Input buffer exhausted before END element found
@@@Invalid data found when processing input@@@
//这个是udp缓存的问题

Assertion desc failed at libswscale/swscale_internal.h:674
//这个是没收到流信息
-d 2
断音

udp中断报错
[h264 @ 0x7fd39c02e200] error while decoding MB 32 41, bytestream -7
[h264 @ 0x7fd39c02e200] concealing 3257 DC, 3257 AC, 3257 MV errors in I frame

av_read_frame返回值为-5 EIO打印日志为
@@@Input/output error@@@
//5min

/home/deviser/UHD4000R/livepush --config /home/deviser/UHD4000R/devices/0080000103/livepush.config --srcip 192.168.100.77 --srcport 25403 --dstip 192.168.100.78 --dstport 6017 --dev 1000012146 --magic 1180000103 --workmode 0 --type ipc --board-id -1 --url rtmp://192.168.100.150/live/gx1234

udp之前3.5s 2M时
udp之前6s 500K

用推mp4,一个半小时不崩

/home/deviser/UHD4000R/Receiver.sh &

[udp @ 0x7f7a340032c0] attempted to set receive buffer to size 104857600 but it only ended up set as 33554432

buffer_size=size
Set the maximum UDP socket buffer size in bytes.
fifo_size=units
Set the UDP receiving circular buffer size, expressed as a number of packets with size of 188 bytes. If not specified defaults to 7*4096.
overrun_nonfatal=1|0
Survive in case of UDP receiving circular buffer overrun. Default value is 0.

以上来自ffmpeg官方文档http://ffmpeg.org/ffmpeg-all.html

1080i50 9分钟13535~~13500 nobuffer如下:

URL = "udp://127.0.0.1:6017";
    //URL = "srt://192.168.100.78:8080?streamid=live.sls.com/live/test";
     AVDictionary *options = NULL;
    // ic->flags |= AVFMT_FLAG_NOBUFFER;//CODEC_FLAG_LOW_DELAY;AVIO_FLAG_NONBLOCK
    // ic->flags |= AVIO_FLAG_NONBLOCK;
    // ic->flags |= AVFMT_FLAG_NONBLOCK;
// URLContext
    // av_dict_set_int(&options, "timeout", 6, 0);
    //  av_dict_set(&options, "stimeout", "5", 0);//milliseconds
     av_dict_set(&options, "fflags", "nobuffer", 0);
        avformat_alloc_output_context2(&ic, 0, "mpegts", URL);
     int re = avformat_open_input(&ic, URL, NULL, &options);

1080i50 4分钟 6000~~6120

9分钟 13500~~13620

带音频睡眠 1080i50
15分钟 22500 ~~22500
20分钟 30027~~30000
用的下面配置

    avcodec_register_all();
    av_register_all();
    avformat_network_init();
    ic = avformat_alloc_context();
    //URL = "srt://127.0.0.1:8080?streamid=live.sls.com/live/test1";
    URL = "udp://127.0.0.1:6017";
     AVDictionary *options = NULL;
     //ic->flags |= AVFMT_FLAG_NOBUFFER;//CODEC_FLAG_LOW_DELAY;AVIO_FLAG_NONBLOCK
     //ic->flags |= AVIO_FLAG_NONBLOCK;
    // ic->flags |= AVFMT_FLAG_NONBLOCK;
// URLContext
    // av_dict_set_int(&options, "timeout", 6, 0);
    //  av_dict_set(&options, "stimeout", "5", 0);//milliseconds
     // ic->flags |= AVFMT_FLAG_GENPTS;
      //  ic->flags |= AVFMT_GENERIC_INDEX;
    //    ic->max_index_size = 99;
    av_dict_set(&options, "buffer_size", "33554432", 0);
    av_dict_set(&options, "reuse", "1", 0);
    av_dict_set(&options, "fifo_size", "30554432", 0);//200Mb
    av_dict_set(&options, "max_delay", "2000000", 0);
     int re = avformat_open_input(&ic, URL, NULL, &options);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

、、、、南山小雨、、、、

分享对你有帮助,打赏一下吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值