您当前的位置: 首页 >  http

qianbo_insist

暂无认证

  • 0浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

rtsp直接转http fmp4

qianbo_insist 发布时间:2021-06-01 07:35:40 ,浏览量:0

目前的方案 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) 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通道就可以了

关注
打赏
1663161521
查看更多评论
立即登录/注册

微信扫码登录

0.0344s