搞了一周,终于把视频流在局域网内传输搞定 您所在的位置:网站首页 linux网络编程实时传输视频教程 搞了一周,终于把视频流在局域网内传输搞定

搞了一周,终于把视频流在局域网内传输搞定

2024-07-17 09:25| 来源: 网络整理| 查看: 265

题目:视频流在Windows系统上的实时捕捉与传输 

参考资料:以下资料都是我从网上找到并积累的,感觉都还可以,有参考价值。

有点兴奋,一周的成果,不容易呀,真心的。

从一个对视频这块一无所知的码农,到现在稍稍入门的码农。没有什么大的变化,不过还是了解到行行都比较难搞。

言归正传:开始讲讲 我的大致思路:如下图所示。

 

其实,之前想过多种方案。

方案一:

比较靠谱点的是在linux下,用fifo传输数据,一边采集并转化为h264,linux自己可以转,这个比windows简单多了。

然后,live555这一端,用fifo(其实是管道)来搞,这样的好处在于 保证两个进程间通信。而且比较实时。

当然,在windows下,也可以通过进程间通信的方式来实现 有很多方式,这里面不多做介绍。

但是,还有更简单的方式,我们完全可以用多线程来实现,在另一个线程中,我们利用循环数组的方式实现,这样的话,可以保证实时性。

方案二:

用opencv采集数据,并可以对数据进行图像处理,然后,我们可以用libx264库对视频进行编码成h264格式,然后进行推送至rtsp服务器。

不过,这里的一个难点就是 libx264使用不太熟悉,导致后来我放弃了这种方案。

后来,看到雷神写的一篇文章,终于让我下定决心,用ffmpeg+live555来搞。

 

如何实现:

关键点分析:

程序由三个线程组成: 一个采集并编码线程;一个将编码后的数据推送至rtsp264线程;一个主线程。线程之间传递数据利用循环数组实现。

整体结构如下:

下面一个个分析下实现思路:

采集并编码线程:

参考雷神的两篇日志

http://blog.csdn.net/leixiaohua1020/article/details/39759623 最简单的基于FFmpeg的内存读写的例子:内存转码器

http://blog.csdn.net/leixiaohua1020/article/details/39759163 最简单的基于FFmpeg的内存读写的例子:内存播放器

 

将编码后的数据推送至rtsp264线程

参考网上两个哥们的日志

http://bubuko.com/infodetail-272265.html Windows下利用live555实现H264实时流RTSP发送

http://blog.csdn.net/xiejiashu/article/details/8269873 用live555做本地视频采集转发,附源码

 

主要是重写getnextframe 代码

整个代码如下:

#include "global.h" #include "FFmpegReadCamera.h" #include "H264LiveVideoServerMediaSubssion.hh" #include "H264FramedLiveSource.hh" #include "liveMedia.hh" #include "BasicUsageEnvironment.hh"  #define BUFSIZE 10000  DWORD WINAPI ChildFunc1(LPVOID); DWORD WINAPI ChildFunc2(LPVOID);    static void announceStream(RTSPServer* rtspServer, ServerMediaSession* sms,char const* streamName)//显示RTSP连接信息 {    char* url = rtspServer->rtspURL(sms);    UsageEnvironment& env = rtspServer->envir();    env


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有