Firefly开源社区

12
发表新贴
打印 上一主题 下一主题

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

104

积分

0

威望

0

贡献

技术小白

积分
104

ffmedia编码模块无法实时写文件及rtsp推流黑屏

发表于 2024-2-26 09:16:10      浏览:854 | 回复:21        打印     [复制链接] 楼主
ffmedia是一个设计精良,使用简洁、优雅的很棒的框架,使用 enc模块遇到两个问题:
1. rtsp推流时,使用vlc拉流黑屏无法显示图像,使用ffplay播放可以显示图像,但报错:[hevc @ 0x7f10093740] Could not find ref with POC 1997
2. 保存视频文件不能实时写文件,只有退出时才把数据写入文件。如果不从enc取,改用vi直接取流,则可以实时写文件数据
综上现象,是否为编码模块没有正确处理分帧导致的问题,请指导如何解决,谢谢!

回复

使用道具 举报

104

积分

0

威望

0

贡献

技术小白

积分
104
发表于 2024-2-27 16:32:06      沙发
本帖最后由 nboxcn 于 2024-2-27 16:34 编辑

大神 用的是demo 命令如下:

  1. ./demo /srv/src/yolo/video/JapanPPE.mp4 -e h265 -p 554 -s -m out.mp4
复制代码


日志图片上传不了,我把文字复制过来


  1. # ./demo /srv/src/yolo/video/JapanPPE.mp4 -e h265 -p 554 -s -m out.mp4
  2. Firefly FFMedia: v2.2.3
  3. INFO: ff_media: start_instance:

  4. ==========================================
  5. INFO: ff_media: start_instance: enable file reader
  6. INFO: 16ModuleFileReader: init: Get Video Resolution( 640 x 360 )
  7. INFO: rtsp_server: rtsp_new_demo: rtsp server demo starting on port 554
  8. INFO: ff_media: start_instance:
  9. Start push stream: rtsp://LocalIpAddr:554/live/0

  10. INFO: ff_media: start_instance:
  11. Input Source:   /srv/src/yolo/video/JapanPPE.mp4
  12. Input format:   640x360 H264
  13. Output format:  640x360 NV12
  14. Encode type:    H265
  15. Decoder:        enable
  16. Rga:            disable
  17. Encoder:        enable
  18. RtspClient:     disable
  19. File writer:    out.mp4
  20. File:           disable
  21. Rtsp push:      554
  22. ==================Pipe===================
  23. ModuleFileReader (H264 640x360)
  24.    |--->ModuleMppDec (NV12 640x360)
  25.            |--->ModuleMppEnc (H265 640x360)
  26.                    |--->ModuleFileWriter (Unknow V4L2 Format 0x0)
  27.                    |--->ModuleRtspServer (Unknow V4L2 Format 0x0)

  28. INFO: 10MppDecoder: getTimeoutSample: 0x5574d588e0 frame info changed 1 error 0 discard 0
  29. INFO: rtsp_server: rtsp_new_client_connection: new rtsp client 192.168.10.101:58301 comming
  30. INFO: rtsp_server: rtsp_new_rtp_connection: new rtp over udp for video ssrc:22345678 local_port:49152-49153 peer_addr:192.168.10.101 peer_port:54938-54939
  31. INFO: 16ModuleFileReader: work: Produce EOS
  32. ERROR: 16ModuleFileWriter: work: wait for productor ModuleMppEnc timeout


复制代码



回复

使用道具 举报

104

积分

0

威望

0

贡献

技术小白

积分
104
发表于 2024-2-27 16:58:02      板凳
rknpu2的demo里面所有mpp encode写文件区分第一帧写头信息,不知道有没有参考价值
  1.   
  2. // Encode to file
  3.   // Write header on first frame
  4.   if (frame_index == 1) {
  5.     enc_data_size = ctx->encoder->GetHeader(enc_data, enc_buf_size);
  6.     fwrite(enc_data, 1, enc_data_size, ctx->out_fp);
  7.   }
  8.   memset(enc_data, 0, enc_buf_size);
  9.   enc_data_size = ctx->encoder->Encode(mpp_frame, enc_data, enc_buf_size);
  10.   fwrite(enc_data, 1, enc_data_size, ctx->out_fp);
复制代码
回复

使用道具 举报

104

积分

0

威望

0

贡献

技术小白

积分
104
发表于 2024-2-28 08:17:24      地板
自己写了个demo测试:
1. 如果直接从srouce->rtsp/writer则可以vlc播放以及实时写文件,能实时看到文件大小的变化;
2. 如果从source->dec->enc->rtsp/writer则不能vlc播放以及写的文件大小为0没有变化,终止程序时文件就有数据,写入文件的视频播放,也是差不多是截止到程序终止时刻;
只要加了enc层,尝试过rtsp/rtmp都不能正常播放,写文件也不能实时写。这个问题跟操作系统以及mpp驱动的版本有关系吗?使用的是ubuntu的操作系统,跑rknpu2里面的demo解码、编码及推流都能正常,但ffmedia的encode模块就是黑屏
回复

使用道具 举报

104

积分

0

威望

0

贡献

技术小白

积分
104
发表于 2024-2-28 09:20:53      5#
按q后的日志如下:

  1. ./demo /srv/src/yolo/video/JapanPPE.mp4 -e h265 -p 554 -s -m out.mp4

  2. Firefly FFMedia: v2.2.3
  3. INFO: ff_media: start_instance:

  4. ==========================================
  5. INFO: ff_media: start_instance: enable file reader
  6. INFO: 16ModuleFileReader: init: Get Video Resolution( 640 x 360 )
  7. INFO: rtsp_server: rtsp_new_demo: rtsp server demo starting on port 554
  8. INFO: ff_media: start_instance:
  9. Start push stream: rtsp://LocalIpAddr:554/live/0

  10. INFO: ff_media: start_instance:
  11. Input Source:   /srv/src/yolo/video/JapanPPE.mp4
  12. Input format:   640x360 H264
  13. Output format:  640x360 NV12
  14. Encode type:    H265
  15. Decoder:        enable
  16. Rga:            disable
  17. Encoder:        enable
  18. RtspClient:     disable
  19. File writer:    out.mp4
  20. File:           disable
  21. Rtsp push:      554
  22. ==================Pipe===================
  23. ModuleFileReader (H264 640x360)
  24.    |--->ModuleMppDec (NV12 640x360)
  25.            |--->ModuleMppEnc (H265 640x360)
  26.                    |--->ModuleFileWriter (Unknow V4L2 Format 0x0)
  27.                    |--->ModuleRtspServer (Unknow V4L2 Format 0x0)

  28. INFO: 10MppDecoder: getTimeoutSample: 0x55b4b8c8e0 frame info changed 1 error 0 discard 0
  29. ==================Summary================
  30. ModuleFileReader (In Full: 0, Out Empty: 23)
  31.    |--->ModuleMppDec (In Full: 264, Out Empty: 1)
  32.            |--->ModuleMppEnc (In Full: 10, Out Empty: 244)
  33.                    |--->ModuleFileWriter (In Full: 0, Out Empty: 0)
  34.                    |--->ModuleRtspServer (In Full: 229, Out Empty: 0)
复制代码

回复

使用道具 举报

104

积分

0

威望

0

贡献

技术小白

积分
104
发表于 2024-3-5 19:26:21      6#
本帖最后由 nboxcn 于 2024-3-6 13:59 编辑

2.2.4版本与2.2.3差不多,只要是用encode编码后推流vlc就没有图像黑屏,使用ffplay播放花屏,无论是从推理后的的rga进行encode还是直接从decode出来的进行encode,ffplay播都花屏且vlc黑屏



  1. #./demo /srv/src/yolo/video/JapanPPE.mp4 -e h264 -l -s -p 554
  2. Firefly FFMedia: v2.2.4
  3. INFO: ff_media: start_instance:

  4. ==========================================
  5. INFO: ff_media: start_instance: enable file reader
  6. INFO: 16ModuleFileReader: init: Get Video Resolution( 640 x 360 )
  7. INFO: rtsp_server: rtsp_new_demo: rtsp server demo starting on port 554
  8. INFO: ff_media: start_instance:
  9. Start push stream: rtsp://LocalIpAddr:554/live/0

  10. INFO: ff_media: start_instance:
  11. Input Source:   /srv/src/yolo/video/JapanPPE.mp4
  12. Input format:   640x360 H264
  13. Output format:  640x360 NV12
  14. Encode type:    H264
  15. Decoder:        enable
  16. Rga:            disable
  17. Encoder:        enable
  18. RtspClient:     disable
  19. File writer:    disable
  20. File:           disable
  21. Rtsp push:      554
  22. ==================Pipe===================
  23. ModuleFileReader (H264 640x360)
  24.    |--->ModuleMppDec (NV12 640x360)
  25.            |--->ModuleMppEnc (H264 640x360)
  26.                    |--->ModuleRtspServer (Unknow V4L2 Format 0x0)

  27. INFO: 10MppDecoder: getTimeoutSample: 0x557df2eea0 frame info changed 1 error 0 discard 0
  28. INFO: rtsp_server: rtsp_new_client_connection: new rtsp client 192.168.10.151:44172 comming
  29. INFO: rtsp_server: rtsp_new_rtp_connection: new rtp over udp for video ssrc:22345678 local_port:49152-49153 peer_addr:192.168.10.151 peer_port:20450-20451
复制代码
回复

使用道具 举报

104

积分

0

威望

0

贡献

技术小白

积分
104
发表于 2024-3-12 17:25:05      7#
请问enc编码模块的问题还有解吗?无论是推流还是保存文件,只要使用了enc的模块都异常,如何能单独测编码模块是否能正常进行编码输出?谢谢
回复

使用道具 举报

104

积分

0

威望

0

贡献

技术小白

积分
104
发表于 2024-3-14 18:22:10      8#
谢谢,不太会看那些数据,用VLC看播放有分流数据、有内容码率,但是没有音频、视频的解码数据、帧数据,跟设备的MPP、RGA版本有没有关系,会不会是那些版本太低的原因?
回复

使用道具 举报

104

积分

0

威望

0

贡献

技术小白

积分
104
发表于 2024-3-15 14:06:15      9#
太棒了,期待!这个问题的修复应该同时解决编码后的推流及写文件的问题吧
回复

使用道具 举报

104

积分

0

威望

0

贡献

技术小白

积分
104
发表于 2024-3-19 17:41:44      10#
本帖最后由 nboxcn 于 2024-3-19 18:07 编辑

刚测试了一下,还真行,太神奇了,很棒,文件也可以实时写了!
大神,请教一下,如果是重RGA用的是 output_para.v4l2Fmt = V4L2_PIX_FMT_BGR24; 编码,给到enc模型编码后rtsp推流,出来的图像好奇怪,有3个重影的花屏,似乎图像格式不正确,应该如何转换?谢谢
回复

使用道具 举报

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

本版积分规则

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