·您当前的位置:首页 > 技术教程 > 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. { 
  17. public: 
  18.     static H264FramedLiveSource* createNew(UsageEnvironment& env, 
  19.         char const* fileName, 
  20.         unsigned preferredFrameSize = 0, 
  21.         unsigned playTimePerFrame = 0);  
  22.  
  23. protected: 
  24.     H264FramedLiveSource(UsageEnvironment& env, 
  25.         char const* fileName,  
  26.         unsigned preferredFrameSize, 
  27.         unsigned playTimePerFrame); 
  28.     // called only by createNew() 
  29.     ~H264FramedLiveSource(); 
  30.  
  31. private: 
  32.     // redefined virtual functions: 
  33.     virtual void doGetNextFrame(); 
  34.     int TransportData( unsigned char* to, unsigned maxSize ); 
  35.  
  36. protected: 
  37.     FILE *fp; 
  38. }; 
  39.  
  40. #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. { 
  19.      fp = fopen( fileName, "rb" );  
  20. } 
  21.  
  22. H264FramedLiveSource* H264FramedLiveSource::createNew( UsageEnvironment& env, 
  23.                                            char const* fileName,  
  24.                                            unsigned preferredFrameSize /*= 0*/,  
  25.                                            unsigned playTimePerFrame /*= 0*/ ) 
  26. {  
  27.     H264FramedLiveSource* newnewSource = new H264FramedLiveSource(env, fileName, preferredFrameSize, playTimePerFrame); 
  28.   
  29.     return newSource; 
  30. } 
  31.  
  32. H264FramedLiveSource::~H264FramedLiveSource() 
  33. { 
  34.     fclose(fp); 
  35. } 
  36.  
  37.  
  38. long filesize(FILE *stream) 
  39. { 
  40.     long curpos, length; 
  41.     curpos = ftell(stream); 
  42.     fseek(stream, 0L, SEEK_END); 
  43.     length = ftell(stream); 
  44.     fseek(stream, curpos, SEEK_SET); 
  45.     return length; 
  46. } 
  47.  
  48. void H264FramedLiveSource::doGetNextFrame() 
  49. { 
  50.  
  51.     if( filesize(fp) >  fMaxSize) 
  52.       fFrameSize = fread(fTo,1,fMaxSize,fp);  
  53.     else 
  54.     { 
  55.         fFrameSize = fread(fTo,1,filesize(fp),fp); 
  56.         fseek(fp, 0, SEEK_SET); 
  57.     } 
  58.     //fFrameSize = fMaxSize; 
  59.     nextTask() = envir().taskScheduler().scheduleDelayedTask( 0, 
  60.         (TaskFunc*)FramedSource::afterGetting, this);//表示延迟0秒后再执行 afterGetting 函数 
  61.     return; 
  62. } 

在 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

热门文章推荐

请稍候...

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

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