TestPattern error

简介: 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。

*/


AVPacket *av_packet_alloc(void);


/*

分配一个AVPacket结构体,并将其字段设置为默认值。分配生成的结构体必须使用 av_packet_free()释放。

返回值:成功返回一个AVPacket结构体,失败返回NULL

注意:这个函数仅分配AVPacket本身,并不包括其内部的数据缓存区。相关的数据缓存区必须通过其他的方式来分配,如 av_new_packet 函数。

*/


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);
相关文章
|
Java Maven Spring
|
6月前
|
Linux
报错 Package ‘oniguruma‘, required by ‘virtual:world‘, not found
报错 Package ‘oniguruma‘, required by ‘virtual:world‘, not found
341 0
|
6月前
|
Perl
报错:error Parsing error: x-invalid-end-tag
报错:error Parsing error: x-invalid-end-tag
131 0
|
11月前
|
资源调度
error This module isn‘t specified in a package.json file.
error This module isn‘t specified in a package.json file.
|
vr&ar
Testpattern
Testpattern
53 0
Parse error: syntax error, unexpected '<<' (T_SL) in .../test2.php on line 2
Parse error: syntax error, unexpected '<<' (T_SL) in .../test2.php on line 2
158 0
find_package
find_package
97 1
|
SQL Java 数据库连接
Parameter ‘XXX‘ not found.Available parameters are [arg2, arg1, arg0, param3, param1, param2]
当SQl语句的占位符和映射接口方法的参数名不一致时,需要将某个参数强行注入到某个占位符变量上时,可以使用@Param这个注解来标注映射的关系(@Param(“占位符的参数名”) 数据类型 自己定义的参数名)
337 0
Parameter ‘XXX‘ not found.Available parameters are [arg2, arg1, arg0, param3, param1, param2]