rtsp直接转http fmp4

Posted qianbo_insist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rtsp直接转http fmp4相关的知识,希望对你有一定的参考价值。

目前的方案 source–>flv

程序员认为rtsp或者其他源 转 flv是可行的一条路,这个没有问题,但是是不是可以直接转fmp4呢,当然是可行的,实际上flv.js 只是把flv格式转成fmp4而已,但是这里有一个问题,在投屏协议中是没有flv格式的,要支持还是直接用http协议或者rtsp协议比较合适,还有一条就是修改投屏协议,但这个不能大规模变,因为你不可能去改变每个设备接收端的协议,sink端可以说是死的,不容改变。

修改的方案,source–>fmp4

dlna协议的httpserver必须自己做,在程序请求url后,如http://xxxxxx/a.mp4 接收请求后必须从源里面把h264和aac修改成为fmp4的内存模式,使用ffmpeg是一个比较简单的方法,当然也可以从数据上直接组

#define BUF_LEN 1024*1024
uint8_t * Buf = NULL;
if (avformat_alloc_output_context2(&O_FContext, NULL, "mp4", NULL) < 0)
        return false;
Buf = (uint8_t*)av_malloc(sizeof(uint8_t)*(BUF_LEN));
O_FContext->pb = avio_alloc_context(Buf, BUF_LEN,1,(void*)this,NULL,write_buffer,NULL);
if (O_FContext->pb == NULL)
{
        avformat_free_context(O_FContext);
        O_FContext = NULL;
		HTTP501_return();
        return;
}
O_FContext->pb->write_flag = 1;
O_FContext->pb->seekable = 1;
O_FContext->flags=AVFMT_FLAG_CUSTOM_IO;
O_FContext->flags |= AVFMT_FLAG_FLUSH_PACKETS;
O_FContext->flags |= AVFMT_NOFILE;
O_FContext->flags |= AVFMT_FLAG_AUTO_BSF;
O_FContext->flags |= AVFMT_FLAG_NOBUFFER;

为了达到通的效果,建议使用go 或者node去写http服务,c语言写要写更多,写成了以后再使用c或者c++去写一个httpserver,这样更方便于验证。

rtsp 接源或其他源

ws方式

最方便的是使用rtsp源,使用live555可以随手建立一个rtsp源来测试,编译好live555后,使用ffmpeg来做一个h264 或者h265的源是非常简单的,

fffmpeg -i aa.mp4 -vcodec copy -an -f h264 a.264

接下去就是做httpserver和wsserver,我使用boost库,部分人使用websocketpp也是很好,但是有兼容性问题,我使用里面的协程方式自己写了一个ws的server,减少了依赖。

http方式

http可以使用go 或者 node 去写一个server,直接做转发用,打通pipe通道就可以了

以上是关于rtsp直接转http fmp4的主要内容,如果未能解决你的问题,请参考以下文章

nodejs ffmpeg 超级工具 rtsp fmp4 rtmp

JavaCV音视频开发宝典:JavaCV实现mp3音频直播FM在线电台服务,无需流媒体服务,浏览器原生audio标签直接播放mp3,支持rtsp/rtmp/flv/hls/本地音视频源直接转码到mp3

JavaCV音视频开发宝典:JavaCV实现mp3音频直播FM在线电台服务,无需流媒体服务,浏览器原生audio标签直接播放mp3,支持rtsp/rtmp/flv/hls/本地音视频源直接转码到mp3

使用 FFmpeg 在 iOS 上编写时将 fMP4 转码为 HLS

请问如何把wma文件直接转化成asf文件呢

关于Xls直接转JSON的解决办法