live555 media server文件播放与读内存播放-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 1235615
  • 博文数量: 76
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 2689
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-19 12:07
个人简介

樽中酒不空

文章分类

全部博文(76)

文章存档

2020年(4)

2019年(1)

2017年(2)

2016年(2)

2015年(7)

2014年(11)

2013年(13)

2012年(18)

2011年(2)

2010年(16)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: linux

2010-09-05 17:56:05

live555提供的示例程序mediaserver是一个基于文件播放的rtsp server。
有朋友问如果改造成一个实时的视频流。

从代码可以看出,当收到rtsp 的命令时,会执行dynamicrtspserver::lookupservermediasession()。
session不存在时,会createnewsms生成一个新的。
在createnewsms中会调用 sms->addsubsession(amraudiofileservermediasubsession::createnew(env, filename, reusesource));
(假设我们的视频源是mpeg4-es)
再跟踪代码,发现createnew是给变量ffilename赋值,把文件名保存起来。

再下去,就是rtsp的播放准备播放命令了,很明显,需要一个视频源,这时程序会调用mpeg4videofileservermediasubsession::createnewstreamsource
在这里bytestreamfilesource::createnew(envir(), ffilename);

接下去就简单了,每次dogetnextframe,会fread,当然,如果异步的话,会交给taskscheduler去做:
void bytestreamfilesource::dogetnextframe() {
  if (feof(ffid) || ferror(ffid)) {
    handleclosure(this);
    return;
  }

#ifdef read_from_files_synchronously
  doreadfromfile();
#else
  if (!fhavestartedreading) {
    // await readable data from the file:
    envir().taskscheduler().turnonbackgroundreadhandling(fileno(ffid),
           (taskscheduler::backgroundhandlerproc*)&filereadablehandler, this);
    fhavestartedreading = true;
  }
#endif
}

//**************
以上是读文件的方式。如果换成实时视频流,有两种方案:一是参考spook,读v4l2驱动得视频数据,读数据后就发送。另一种方法,是从内存中读到视频数据(来源可能是文件,也可能从远程通过socket得到,也可以从驱动读出,得到数据放到内存中)。如果对live media server做最小改动的话,就是参考bytestreamfilesource,再写一个source。
当然,想偷懒的话也简单:doreadfromfile时,从fread读文件,改成读内存缓冲就行了。注意一定要加锁。

以上只是理论,等放长假找个时间写出来试试。
阅读(9164) | 评论(2) | 转发(2) |
给主人留下些什么吧!~~

sxcong2011-08-09 10:08:55

后来一直做iphone开发,没有继续,不过理论上讲应该不错的。

|

2011-04-19 10:39:16

您好,请问后来这个方案实现了吗?谢谢!

|
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图