Live555学习7:如何基于Live555改写直播流
Posted Stoneshen1211
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Live555学习7:如何基于Live555改写直播流相关的知识,希望对你有一定的参考价值。
文章目录
方法一 :fifo
网上有采用fifo的方式进行直播流,使用例程testOnDemandRTSPServer, 然后设置要读取的文件,随后创建一个管道,管道的名字即为要读取的文件的名字,然后再海思视频采集线程中将视频流写入管道即可。
上面的方法没有测试过,记录一下。
参考博文:
RTSP服务端转发服务(live555库中的testH264VideoStreamer.cpp和testOnDemandRTSPServer.cpp实例)
https://www.cnblogs.com/dong1/p/5968207.html
LIVE555 利用FIFO实现直播
https://blog.csdn.net/tea1896/article/details/72972616
方法二:重写类
我们参考testOnDemandRTSPServer中有关H264服务创建的部分来参考需要重写什么类。
关于创建RTSPServer和创建媒体会话ServerMediaSession这部分就不再说了,属于共性部分,不需要我们进行重写。
随后又为媒体会话ServerMediaSession创建了一个子会话ServerMediaSubsession,在前面博文《LIVE555学习5:testOnDemandRTSPServer例程解析》中说到:
- 在SETUP会话中,有调用到subsession->getStreamParameters,这个虚函数在-OnDemandServerMediaSubsession类中被实现,在getStreamParameters中,可以看到先后调用了createNewStreamSource和createNewRTPSink来创建,然后将其进行关联。
通过以上可以得知,会调用ServerMediaSubsession中的函数createNewStreamSource和createNewRTPSink来创建Source和Link,并将它们进行关联。因此,我们首先需要仿照H264VideoFileServerMediaSubsession重新写一个类,并且继承自OnDemandServerMediaSubsession,类中的其他函数仿照H264VideoFileServerMediaSubsession中的基本不变或者根据自己的需求进行改动,createNewStreamSource中创建Source需要改变一下,我们来看一下这个函数:
FramedSource* H264VideoFileServerMediaSubsession::createNewStreamSource(unsigned /*clientSessionId*/, unsigned& estBitrate)
estBitrate = 500; // kbps, estimate
// Create the video source:
ByteStreamFileSource* fileSource = ByteStreamFileSource::createNew(envir(), fFileName);
if (fileSource == NULL) return NULL;
fFileSize = fileSource->fileSize();
// Create a framer for the Video Elementary Stream:
return H264VideoStreamFramer::createNew(envir(), fileSource);
在createNewStreamSource中,创建的Source是ByteStreamFileSource, 这个类中当调用doGetNextFrame时候会从文件中取出数据,并传递给H264VideoStreamFramer进行分析,然后再传给Source。因此,我们仿照ByteStreamFileSource创建一个新的类继承自FramedSource,并且重写doGetNextFrame函数,将这个函数从文件中读取改为从内存中获取,类中的其他函数大致不变,可根据需求进行增删。
根据上面的描述,我们需要创建两个类:
仿照H264VideoFileServerMediaSubsession重新写一个类,并且继承自OnDemandServerMediaSubsession,重写createNewStreamSource。
仿照ByteStreamFileSource创建一个新的类继承自FramedSource,并且重写doGetNextFrame函数。
具体代码就不贴出来了。
参考博文:
live555学习笔记17-H264VideoStreamParser详解
https://blog.csdn.net/niu_gao/article/details/7212181
LIVE555再学习 – live555实现RTSP直播服务器 分析
https://blog.csdn.net/qq_29350001/article/details/78114330
以上是关于Live555学习7:如何基于Live555改写直播流的主要内容,如果未能解决你的问题,请参考以下文章