Firefly开源社区

打印 上一主题 下一主题

[应用开发] ffmedia编码模块无法实时写文件及rtsp推流黑屏

823

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
823
发表于 2024-2-27 15:31:52      楼主
你是使用demo测试的吗?如果使用demo可以将使用命令及log粘贴出来,方便寻找问题。
最新版测试应该都没有以上问题。
回复

使用道具 举报

823

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
823
发表于 2024-2-27 19:35:53      沙发
nboxcn 发表于 2024-2-27 16:58
rknpu2的demo里面所有mpp encode写文件区分第一帧写头信息,不知道有没有参考价值

不是这个问题。裸流如果没有参数集,ffmpeg一样解不出来。你可以在板子安装vlc看他能不能拉流,如果能拉,可能是防火墙限制,如果是防火墙限制,可以使用tcp协议连接,rtsp推流支持rcp和udp协议。
保存文件不是实时问题:你可以另开终端查看文件大小,看是不是在增加。也可以边看(-x 或 -d 0)边封装文件, 在中途Ctrl C 掉程序,在使用demo或ffplay播放该文件是不是到你杀掉程序那一帧
回复

使用道具 举报

823

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
823
发表于 2024-2-28 09:10:17      板凳
nboxcn 发表于 2024-2-28 08:17
自己写了个demo测试:
1. 如果直接从srouce->rtsp/writer则可以vlc播放以及实时写文件,能实时看到文件大 ...

文件写入模块不依赖任何东西,有数据就会被及时即时写入,从你的描述看似乎是解码或编码模块没有产生数据。如果可以,你复现出这种现象,然后等几秒中,按q键退出demo,会将每个模块处理的帧数打印出来,便可看到是哪个模块不生产数据。
文件读入模块如果变成EOS状态,也就是打印Produce EOS,说明已经读到末尾,你可以添加-l 参数来循环读取,让文件读取模块一直生产数据。
回复

使用道具 举报

823

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
823
发表于 2024-3-5 15:20:43      地板
wx__AxJ5zO 发表于 2024-3-5 14:59
我使用h264格式视频只进行推流,vlc拉取也是黑屏,可能是rtsp服务器这部分有点问题

拉最新v2.2.4代码,可以使用本地文件编码h264或h265推rtsp流测试:
./demo xxx.mp4 -e h264 -l -s -p 554
pc拉流使用ffplay或vlc等其他工具拉流, 如果拉流失败可能防火墙限制,可更改tcp协议尝试拉流:
ffplay rtsp://xxx -rtsp_transport tcp
回复

使用道具 举报

823

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
823
发表于 2024-3-12 17:40:41      5#
nboxcn 发表于 2024-3-12 17:25
请问enc编码模块的问题还有解吗?无论是推流还是保存文件,只要使用了enc的模块都异常,如何能单独测编码模 ...

编码模块设置回调,在回调函数里打印数据看看
回复

使用道具 举报

823

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
823
发表于 2024-3-15 10:38:00      6#
wx__AxJ5zO 发表于 2024-3-5 15:56
ffplay rtsp://192.168.1.35:554/live/0 -rtsp_transport tcp 无画面,输出信息如下

已复现,这个问题应该是不同平台编码器差异导致的,下个版本会修复该问题。
回复

使用道具 举报

823

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
823
发表于 2024-3-19 13:35:34      7#

简单的处理就是把编码模块默认gop参数更改为其他就可以了。
--- a/demo/demo.cpp
+++ b/demo/demo.cpp
@@ -545,7 +545,7 @@ SOURCE_CREATED:
#endif

     if (inst_conf->enc_enabled) {
-        shared_ptr<ModuleMppEnc> enc = make_shared<ModuleMppEnc>(inst_conf->encode_type);
+        shared_ptr<ModuleMppEnc> enc = make_shared<ModuleMppEnc>(inst_conf->encode_type, 30, 30);
         enc->setProductor(inst->last_module);
         enc->setBufferCount(8);
         enc->setDuration(0);  // Use the input source timestamp
回复

使用道具 举报

823

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
823
发表于 2024-3-20 09:06:14      8#
nboxcn 发表于 2024-3-19 17:41
刚测试了一下,还真行,太神奇了,很棒,文件也可以实时写了!
大神,请教一下,如果是重RGA用的是 output ...

参考这个帖子
https://dev.t-firefly.com/thread-130038-1-5.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表