lenLRX / Atlas_ACL_E2E_Demo

188 stars 38 forks source link

请问 FFmpeg 用的什么版本 #2

Closed AlPasser closed 3 years ago

AlPasser commented 4 years ago

编译成功,但 FFmpeg avcodec_open2 过不去。 image

lenLRX commented 4 years ago

版本的话,我用的是前面环境配置文档里Ubuntu apt get install的版本。 你这个图里看起来比较奇怪的是frame rate都是0,你可以尝试代码里写死一个frame rate。 我不清楚这里为什么我的rtsp输入没有获取到正确的frame rate。 可能是有些场景我没处理好吧

lenLRX commented 4 years ago

再看了一下你这个图,你已经写死了time_base,那我暂时看不出来是什么问题了,而且没有错误码直接coredump,可以检查一下video_avcc合video_avc这两个指针对应的对象是不是有问题。比如前面打开输出流就失败了,但是我没有检查

或者设置一下AV_LOG LEVEL 或者用gdb看看挂在哪了

AlPasser commented 4 years ago

好的,我觉得还是环境问题,我自己整整环境再照着 FFmpeg 文档改改

AlPasser commented 4 years ago

应该是跑起来了,在我这是 libx264 依赖的问题,之前是编译源码安装的,卸了用 apt 重装了下,命令如下: sudo apt install yasm libsdl2-dev libx264-dev libx265-dev libfdk-aac-dev 但推出来的流是这样的: image 源码还在慢慢看,请问老哥可以快速定位这个问题吗?

AlPasser commented 4 years ago

补一张截屏,这应该是画框^_^ image

lenLRX commented 4 years ago

应该是跑起来了,在我这是 libx264 依赖的问题,之前是编译源码安装的,卸了用 apt 重装了下,命令如下: sudo apt install yasm libsdl2-dev libx264-dev libx265-dev libfdk-aac-dev 但推出来的流是这样的: image 源码还在慢慢看,请问老哥可以快速定位这个问题吗?

设置一下av_set_log_level 设成TRACE,ffmpeg的日志还是挺全的。 能看到绿色画面应该说明至少有流了,没有流应该是转圈圈

lenLRX commented 4 years ago

有框的话可能是,流程上没有用resize之后的图像画框,而是直接拿了个空的buffer画框。。 你可以检查一下main函数那个文件里的流程

AlPasser commented 4 years ago

整了一天,还是绿的...... 在 dvpp_decoder.cpp 文件里的 DvppDecCallback 函数里加了一段测试代码: image 这里输出的图片就全是绿的了......讲道理在这个回调函数里,应该已经是解码后得到的 yuv420sp 里吧 但还奇怪,走的模型推理 total box num 还有时候大于 0,看来推理成功了......

lenLRX commented 4 years ago

整了一天,还是绿的...... 在 dvpp_decoder.cpp 文件里的 DvppDecCallback 函数里加了一段测试代码: image 这里输出的图片就全是绿的了......讲道理在这个回调函数里,应该已经是解码后得到的 yuv420sp 里吧 但还奇怪,走的模型推理 total box num 还有时候大于 0,看来推理成功了......

要不你试一下按照我的文档中的例子,另外用VLC推个流试试。

然后设置一下ffmpeg日志等级,看看有没有什么线索。 看一下npu的host日志,看一下有没有特别的错误。

最近出差没有办法直接帮你看。

AlPasser commented 4 years ago

整了一天,还是绿的...... 在 dvpp_decoder.cpp 文件里的 DvppDecCallback 函数里加了一段测试代码: image 这里输出的图片就全是绿的了......讲道理在这个回调函数里,应该已经是解码后得到的 yuv420sp 里吧 但还奇怪,走的模型推理 total box num 还有时候大于 0,看来推理成功了......

要不你试一下按照我的文档中的例子,另外用VLC推个流试试。

然后设置一下ffmpeg日志等级,看看有没有什么线索。 看一下npu的host日志,看一下有没有特别的错误。

最近出差没有办法直接帮你看。

ok

AlPasser commented 4 years ago

用 VLC 推流没有问题,但 UDP 丢包严重,老是花屏。 我是用 EasyDarwin + FFmpeg 搭的 RTSP 测试流:https://github.com/EasyDarwin/EasyDarwin。 FFmpeg 命令: ffmpeg -re -i testshanghai_720p.mp4 -rtsp_transport tcp -vcodec h264 -strict -2 -f rtsp rtsp://localhost/test 我还在尝试修改我的 FFmpeg 命令看看能不能跑通......

lenLRX commented 4 years ago

用 VLC 推流没有问题,但 UDP 丢包严重,老是花屏。 我是用 EasyDarwin + FFmpeg 搭的 RTSP 测试流:https://github.com/EasyDarwin/EasyDarwin。 FFmpeg 命令: ffmpeg -re -i testshanghai_720p.mp4 -rtsp_transport tcp -vcodec h264 -strict -2 -f rtsp rtsp://localhost/test 我还在尝试修改我的 FFmpeg 命令看看能不能跑通......

就是说,你尝试用VLC推流,功能是正常的,但是效果不好。 你这种推流方式我下周有时间了也去测试一下。

lenLRX commented 3 years ago

这个问题已经定位解决,原因是,在你这种推流场景下,不知道为什么在码流中间没有SPS和PPS的包。 解决方法:把AVCodecContext中的extradata当作packet传给VDEC。 https://github.com/lenLRX/Atlas200DK_ACL/blob/master/src/ffmpeg_input.cpp#L128