
音视频
文章平均质量分 87
garefield
这个作者很懒,什么都没留下…
展开
-
rtsp流转为fmp4并由WebSocket网关转发,及对应js播放器
web端是无法直接播放rtsp流的,目前常用的解决方案是如jsffmpeg、flv.js等。这些方案都是要推送流到服务端,之后才能在web上播放视频,相对比较麻烦。我采用websocket结合mse的方式,实现了一个websocket网关,及其对应的js播放器,在这里做下说明,具体代码参考github上我的源码。这套方案的原理是,ws网关在拉到rtsp流后,取得mime,将其发送给web端,然...原创 2020-04-14 14:12:29 · 4479 阅读 · 8 评论 -
ffmpeg实现动态调整字幕和水印位置
紧接上一篇文章,字幕内容的修改可以通过av_opt_set修改AVFilterContext的priv来实现,那么字幕和水印的位置是否也可以这样呢?打开vf_drawtext.c和vf_overlayer.c这两个文件,发现它们都有名为"x"和"y"的设置,然而当我采用av_opt_set将这两个值设置之后,图像位置却没有发生改变,仔细阅读源码,可以看到这两个滤镜都有这样几个变量:cha...原创 2019-01-15 14:12:14 · 7940 阅读 · 3 评论 -
ffmpeg实现动态调整字幕内容
最近在做一个项目,需要在视频上叠加图片和文字,而且是要能根据外部接口调整文字的内容,以及控制图片的位置。水印和字幕当然还是用ffmpeg的滤镜来实现了,变换文字内容也可以用drawtext的textfile来实现,但涉及到实时控制显示位置,就干脆一起使用改变滤镜参数的方法实现了。这篇文章里仅谈谈怎么修改字幕的文字内容,动态调整字幕和水印位置需要修改ffmpeg源码,我会在下一篇文章中讲如何实现。...原创 2019-01-15 13:46:24 · 6906 阅读 · 3 评论 -
ffmpeg源码修改以适应海康摄像头rtsp流的aac音频
最近在测试通过rtsp采集海康的摄像头,以前海康的摄像头采用g711音频,没出现什么问题,这次的设备升级成了aac音频,结果使用ffmpeg出现音频格式不能识别的问题,报什么Audio object type 0的错误,查看发现是解码器的objecttype成了0造成的,于是查看源码。跟踪发现打开rtsp时发来的sdp信息中音频的信息如下:a=rtpmap:104 mpeg4-generi原创 2015-07-14 15:01:57 · 8156 阅读 · 3 评论 -
ffmpeg添加MP4的pcm音频支持
ffmpeg中对MP4的打包处理是在movenc.c中,在实际打包过程中发现除了mov类型外,其它类型如vob等均无法生成音频的声道信息,经过分析发现在mov_write_audio_tag函数的最后有如下代码 if (track->mode == MODE_MOV && track->enc->codec_type == AVMEDIA_TYPE_AUDIO) mov_原创 2015-04-18 14:54:01 · 9758 阅读 · 10 评论 -
ffmpeg添加mpeg ps流的pcm的编码支持
ffmpeg的mpegenc.c中,缺少了psm头的写入,而ps流的封包应当是ps,即pes在写入sys头之后写pes之前应当先写入psm头,因此mpegenc.c中需要增加写入psm头的函数,如下:static uint8_t get_stream_type(int stream_codec_id){ uint8_t res = 0;原创 2015-04-18 14:51:29 · 3599 阅读 · 1 评论 -
ffmpeg修改源码添加flv对pcm的打包支持
flv支持的音频包含pcm_mulaw和pcm_alaw但使用ffmpeg打包输出的文件使用解码器打开发现无法真确得到音频的格式信息,分析源码发现除了AAC、H264、MPEG4之外,其余的格式信息未被写入到流中,修改flvenc.c,找到flv_write_header函数,在函数最后写格式信息部分修改如下: for (i = 0; i nb_streams; i++) {原创 2015-04-18 14:54:32 · 2958 阅读 · 0 评论 -
ffmpeg添加mpeg ts对pcm的支持
在mpegtsenc.c的mpegts_write_pmt函数中,switch(st->codec->codec_id)的case中,添加如下代码 case AV_CODEC_ID_PCM_MULAW: stream_type = 0x91; break; case AV_CODEC_ID_原创 2015-04-18 14:51:39 · 7009 阅读 · 3 评论 -
ffmpeg添加mpeg ps流的pcm的解码支持
ffmpeg原本不支持mpeg ps流,原因有两个。首先在编码时,ffmpeg没有在流中写入psm头;其次,在解码时,只在读文件头的时候判断了流的类型,而ps流中,流类型是在psm头中的,这样ffmpeg会读不到流类型。 要解决读不到媒体类型的问题,需要在mpeg.c函数中mpegps_read_packet函数中做修改,该函数是读取ps包的,如果每个ps包都有psm头,那么到此时流类型原创 2015-04-18 14:48:12 · 6044 阅读 · 5 评论 -
ffmpeg修改flv打包aac声道部分
ffmpeg默认的flv打包输出aac的音频是44100的采样率、双声道、16位数据格式,但flv格式是可以支持其它参数的,因此需要修改flvenc.c在get_audio_flags函数中,有这段代码:if (enc->codec_id == AV_CODEC_ID_AAC) // specs force these parameters return FLV_CO原创 2015-04-18 14:55:30 · 2933 阅读 · 0 评论