ffmpeg
文章平均质量分 80
lxkj_2024
吾尝终日而思矣,不如须臾之所学也
展开
-
修改ffmpeg源码为rtsps协议增加证书校验功能
鉴于安全原因,我们将之前使用ffmpeg api实现的rtsp推流修改为rtsps,因为ffmpeg本身支持rtsps,所以我们只需编译配置ffmpeg时增加-enable-openssl参数,然后使用ffmpeg api时直接将rtsp替换为rtsps即可(以及对应的端口修改,同时服务端也需要支持rtsps)。原创 2024-09-24 13:45:28 · 866 阅读 · 0 评论 -
修改ffmpeg源码实现rtps协议(rtp over tls)
对于rtps_open,首先调用av_url_split获取协议的hostname(域名或者ip)、端口以及协议名,之后对协议名进行判断如果是rtps则表明我们要使用的底层协议是tls,因为ff_rtps_protocol的name字段是rtps,所以走到rtps_open时其协议名一定是rtps,也就是说这里的判断多此一举了,如果想同时支持TCP和TLS的话可以通过增加选项来实现。的代码,这里的更加简单,都不需要编解码,仅仅是转封装,不再描述。原创 2024-08-29 13:29:01 · 797 阅读 · 0 评论 -
记一次ffmpeg自动流选择遇到的问题
因为ffmpeg这个进程就是ffmpeg.c及相关源文件编译出来的,所以可以通过扒代码的方式来进行分析,最终通过代码调试,发现问题出在自动流选择的score计算上,具体就是AVStream的disposition上,A.mp4和B.mp4都包含两个视频流和两个音频流,但第一个音频流和第一个视频流被ffmpeg当作是默认流(也就是具有AV_DISPOSITION_DEFAULT标识),所以默认流的得分要比非默认流的得分大5000000,因此解释了上面“不合理“的地方。原创 2024-07-17 16:38:32 · 323 阅读 · 0 评论 -
使用fbdev进行屏幕图像采集
fbdev即frame buffer device,翻译为帧缓冲设备,代表了显示硬件的抽象,每个帧缓冲设备对应于一个显示屏或显示控制器。它通过/dev/fbx(如/dev/fb0)设备文件对外暴露,可以通过读写这些文件来进行图像的采集与图像的显示。原创 2024-07-10 14:43:30 · 500 阅读 · 0 评论 -
ffmpeg API实现拉取rtsp流存储为图片
在avformat_open_input之后我们通常会调用avformat_find_stream_info来获取输入文件的流信息,这是因为提供的输入文件可能没有文件头或者文件头没有足够的信息,avformat_find_stream_info会尝试解码来获取更多的信息。和解码一样,新版本的ffmpeg使用avcodec_send_frame和avcodec_receive_packet来代替旧的编码接口avcodec_encode_video2来进行编码,其用法也和解码一样。原创 2024-06-26 15:14:58 · 2757 阅读 · 0 评论 -
ffmpeg可执行程序裁剪
最近我们在嵌入式板子上有一个需求,拉取网络摄像头的rtsp流保存为jpg/png图片,我们准备借助ffmpeg命令行工具去完成,命令行实现这个功能很简单,但是编译出的ffmpeg可执行程序的大小很大,因此我们尝试对ffmpeg可执行程序进行编译裁剪,最终我们发现按照下面方法后进行裁剪后的大小只有之前的1/4不到,解决了我们遇到的问题。原创 2024-05-29 15:28:17 · 1640 阅读 · 0 评论 -
ffmpeg进程优雅退出
有时我们会在程序中通过fork/execl方式调用ffmpeg进程执行某些命令,这通常比调用API更简单。然后我们等待这些命令执行完毕后ffmpeg进程自动就会结束,但如果我们的任务是需要长时间运行比如拉取rtsp流保存为mp4,我们希望这个工作可以随时终止,终止的时候ffmpeg要优雅的退出,即ffmpeg要可以在退出时执行写入mp4的元数据、正常关闭文件等清理工作,使他看起来就像是正常退出一样,ffmpeg可以吗?原创 2024-05-23 17:02:15 · 1071 阅读 · 1 评论