·您当前的位置:首页 > 技术教程 > Rtsp技术 >

[rtsp]摄像头采集并进行264编码,用live555实现直播

时间:2015-05-05 15:59酷播
[rtsp]摄像头采集并进行264编码,用live555实现直播

[rtsp]摄像头采集并进行264编码,用live555实现直播

  1. H264FramedLiveSource.hh 
  2.  
  3. /* 
  4.  * Filename: H264FramedLiveSource.hh 
  5.  * Auther: chenbin 
  6.  * Create date: 2013/ 1/22 
  7.  */ 
  8.  
  9. #ifndef _H264FRAMEDLIVESOURCE_HH 
  10. #define _H264FRAMEDLIVESOURCE_HH 
  11.  
  12. #include <FramedSource.hh> 
  13.  
  14.  
  15. class H264FramedLiveSource : public FramedSource 
  16. public: 
  17.     static H264FramedLiveSource* createNew(UsageEnvironment& env, 
  18.         char const* fileName, 
  19.         unsigned preferredFrameSize = 0
  20.         unsigned playTimePerFrame = 0);  
  21.  
  22. protected: 
  23.     H264FramedLiveSource(UsageEnvironment& env, 
  24.         char const* fileName,  
  25.         unsigned preferredFrameSize, 
  26.         unsigned playTimePerFrame); 
  27.     // called only by createNew() 
  28.     ~H264FramedLiveSource(); 
  29.  
  30. private: 
  31.     // redefined virtual functions: 
  32.     virtual void doGetNextFrame(); 
  33.     int TransportData( unsigned char* to, unsigned maxSize ); 
  34.  
  35. protected: 
  36.     FILE *fp; 
  37. }; 
  38.  
  39. #endif 
  1. H264FramedLiveSource.cpp 
  2.  
  3. /* 
  4.  * Filename:  H264FramedLiveSource.cpp 
  5.  * Auther:  mlj 
  6.  * Create date: 2013/ 1/22 
  7.  */ 
  8.  
  9. #include "H264FramedLiveSource.hh" 
  10.   
  11.  
  12.  
  13. H264FramedLiveSource::H264FramedLiveSource( UsageEnvironment& env,   
  14.     char const* fileName,  
  15.     unsigned preferredFrameSize,  
  16.     unsigned playTimePerFrame ) 
  17.     : FramedSource(env) 
  18.      fp = fopen( fileName, "rb" );  
  19.  
  20. H264FramedLiveSource* H264FramedLiveSource::createNew( UsageEnvironment& env, 
  21.                                            char const* fileName,  
  22.                                            unsigned preferredFrameSize /*= 0*/,  
  23.                                            unsigned playTimePerFrame /*= 0*/ ) 
  24. {  
  25.     H264FramedLiveSource* newnewSource = new H264FramedLiveSource(env, fileName, preferredFrameSize, playTimePerFrame); 
  26.   
  27.     return newSource; 
  28.  
  29. H264FramedLiveSource::~H264FramedLiveSource() 
  30.     fclose(fp); 
  31.  
  32.  
  33. long filesize(FILE *stream) 
  34.     long curpos, length; 
  35.     curpos = ftell(stream); 
  36.     fseek(stream, 0L, SEEK_END); 
  37.     length = ftell(stream); 
  38.     fseek(stream, curpos, SEEK_SET); 
  39.     return length; 
  40.  
  41. void H264FramedLiveSource::doGetNextFrame() 
  42.  
  43.     if( filesize(fp) >  fMaxSize) 
  44.       fFrameSize = fread(fTo,1,fMaxSize,fp);  
  45.     else 
  46.     { 
  47.         fFrameSize = fread(fTo,1,filesize(fp),fp); 
  48.         fseek(fp, 0, SEEK_SET); 
  49.     } 
  50.     //fFrameSize = fMaxSize
  51.     nextTask() = envir().taskScheduler().scheduleDelayedTask( 0, 
  52.         (TaskFunc*)FramedSource::afterGetting, this);//表示延迟0秒后再执行 afterGetting 函数 
  53.     return; 

在 H264FramedLiveSource::doGetNextFrame() 中,将要发送的内容复制到 fTo,最大为fMaxSize,fFrameSize指示实际发送的内容是多少字节。这里暂时还是从文件读作为测试。

应用实例,本实例为基于web来播放监控摄像头画面的效果:

详细介绍参见http://live.cuplayer.com/RtspCameraLive.html

rtsp摄像头在线监控技术,实现海康rtsp监控摄像头的web端监控

 web端无须装插件(支持PC,安卓,IOS苹果系统)效果1

rtsp摄像头在线监控技术,实现海康rtsp监控摄像头的web端监控

  web端无须装插件(支持PC,安卓,IOS苹果系统)效果2

rtsp摄像头在线监控技术,实现海康rtsp监控摄像头的web端监控

  web端无须装插件(支持PC,安卓,IOS苹果系统)效果3

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器