我与Android的ffmpeg解码H264 RTP流。我发现了一个奇怪的问题:如果我不叫avformat_find_stream_info
,解码P frame
需要几十微秒,相比之下,呼吁avformat_find_stream_info
之前解码将P frame
解码时间缩短至平均不到1毫秒。但是,avformat_find_stream_info
本身在网络流上耗费时间。是否有什么我可以做,使解码快速,而无需调用avformat_find_stream_info
?的ffmpeg解码慢呼不avformat_find_stream_info
回答
当avformat_find_stream_info叫,流媒体URL(或本地文件)通过该功能进行扫描,以检查在给定的URL有效流。
这意味着,换句话说,它将从给定输入URL几个包进行解码,以便可以解码包快速与AVCodecContext,这是在avformat_find_stream_info初始化。
我没有测试它,但它不能被解码没有调用avformat_find_stream_info在一般情况下,或者它可能是每次解码数据包时被初始化。
无论如何,这就是为什么avformat_find_stream_info消耗网络流量。因为,正如我所说的那样,它会抽取前几个数据包。
如果你真的想在不调用此函数包解码速度快,你应该初始化AVCodecContext自己,手动。
当然,你无需调用avformat_find_stream_info事先解码帧,至少对于真正MPEGTS,其中我处理。我不确定需要什么信息,所以我不知道如何手动填充AVCodecContext结构。我想我需要RTFSC。 – skipper
正如我所说的,它实际上并不需要调用“avformat_find_stream_info”。在mpegts格式中,每个帧都有自己的编解码器信息,因此即使视频数据的一部分丢失,您也可以播放视频。使用“avcodec_find_decoder”和“avcodec_open2”功能可轻松打开解码器。 –
- 1. FFMPEG解码太慢(avcodec_send_packet()/ avcodec_receive_frame())
- 2. FFmpeg解码H264视频太慢
- 3. FFmpeg不解码h264流
- 4. FFmpeg解码H264
- 5. FFMPEG音频解码
- 6. Sox和FFMPEG解码
- 7. Android上的ffmpeg解码器
- 8. 应用坠毁avformat_find_stream_info
- 9. 使用ffmpeg解码TCP流
- 10. FFmpeg使用libavcodec解码opur
- 11. FFMPEG解码 - 内存泄漏
- 12. 了解FFMPEG视频编码
- 13. FFmpeg C++ H264解码错误
- 14. C++ - FFmpeg Ogg/Vorbis解码
- 15. Ffmpeg在解码时死机
- 16. FFMPEG和MP3。如何解码
- 17. FFMpeg解码MJpeg时崩溃
- 18. FFMPEG:使用FFMPEG API编码后直接解码数据包
- 19. H264的ffmpeg:如何初始化的ffmpeg解码与X264
- 20. 的ffmpeg解码音频数据是零
- 21. 复制已解码的ffmpeg AVFrame
- 22. 解码AAC与ffmpeg的PCM在Android
- 23. ffmpeg的视频编解码器
- 24. FFmpeg的C++ API解码H264错误
- 25. iPhone - 使用ffmpeg解码H264的问题
- 26. FFmpeg的AAC(“libfaac”)编解码器选项?
- 27. 视频解码使用FFmpeg的为Android
- 28. Android和FFmpeg。视频很慢
- 29. 慢MP3解码在Android
- 30. ffmpeg流不兼容输出编解码器ID和incorect编解码器参数
什么信息中缺少AVFormatContext和AVCodecContext导致解码P帧这么慢? – skipper
10 us小于1毫秒。另外,你能描述你如何测量帧解码时间吗? –
在调用avcodec_decode_video2()之前和之后记录systemTime(SYSTEM_TIME_MONOTONIC)的系统时间。 – skipper