嵌入式 vlc中vlm介绍

原创 2013年12月02日 14:43:41
 

概述

代码从两大部分入手,一个telnet的deamon。还有就是rtsp的实现部分 。结果发现,他们通过了一个桥梁vlm的media进行沟通。

  • 当受到new MEDIANAME vod enabled 就建立一个media。
  • 如果受到setup MEDIANAME input filename.mpg 就读入流准备分析,建立input流
  • 当受到rtsp的请求后,就建立这个output流

这样,vod就和别的模块一致了。rtsp只是一种output流的module。

代码分析

 

1./modules/control/telnet.c

static void Run( intf_thread_t *p_intf ){
 vlm_ExecuteCommand( p_sys->mediatheque,cl->buffer_read,
                                        &message );
}
2./src/Misc/vlm.c 

int vlm_ExecuteCommand( vlm_t *p_vlm, const char*psz_command,
                       vlm_message_t **pp_message)
{
}
vlm_MediaNew( vlm_t*vlm, const char *psz_name, int i_type ){
 vlm_media_t *media = malloc( sizeof(vlm_media_t ) );
}
*****************************************************
struct vlm_t
{
   VLC_COMMON_MEMBERS
   vlc_mutex_t lock;
   int           i_media;
   vlm_media_t   **media;
   int           i_vod;
   vod_t         *vod;
   int           i_schedule;
   vlm_schedule_t **schedule;
};
*****************************************************
int vlm_MediaSetup( vlm_t *vlm, vlm_media_t *media, const char*psz_cmd,
                   const char *psz_value ){
                    
 if( (p_input = input_CreateThread2( vlm,&media->item, psz_header
                              ) ) )
 {
  while( !p_input->b_eof&& !p_input->b_error ) msleep( 100000 );
  
  input_StopThread( p_input);
  input_DestroyThread( p_input);
  vlc_object_detach( p_input);
  vlc_object_destroy( p_input);
 }
}
3./src/Input/input.c 
input_thread_t *__input_CreateThread2( vlc_object_t*p_parent,
                                      input_item_t *p_item,
                                      char *psz_header )
{
 input_thread_t *p_input =NULL;      
 p_input = Create( p_parent, p_item, psz_header,VLC_FALSE );
 
 vlc_object_attach( p_input, p_parent );
 
 
 if( vlc_thread_create( p_input, "input",Run,
                           VLC_THREAD_PRIORITY_INPUT, VLC_TRUE ) )
 {
  msg_Err( p_input, "cannotcreate input thread" );
  vlc_object_detach( p_input);
  vlc_object_destroy( p_input);
  return NULL;
 }
}
staticinput_thread_t *Create( vlc_object_t *p_parent, input_item_t*p_item,
                              char *psz_header, vlc_bool_t b_quick )
{
}


static int Run( input_thread_t *p_input )
{
}

=====================================================================================
4. /modules/misc/rtsp.c
static vod_media_t *MediaNew( vod_t *p_vod, const char*psz_name,
                             input_item_t *p_item )
{
    vod_sys_t*p_sys = p_vod->p_sys;
    vod_media_t*p_media = malloc( sizeof(vod_media_t) );
    inti;
    if(!p_media )
    {
       msg_Err( p_vod, "not enough memory" );
       return NULL;
   }
   memset( p_media, 0, sizeof(vod_media_t) );
   p_media->es = 0;
   p_media->psz_mux = 0;
   p_media->rtsp = 0;
   p_media->b_raw = VLC_FALSE;
   asprintf( &p_media->psz_rtsp_path, "%s%s",p_sys->psz_path, psz_name );
   p_media->p_rtsp_url =
       httpd_UrlNewUnique( p_sys->p_rtsp_host,p_media->psz_rtsp_path, NULL,
                           NULL, NULL );
    if(!p_media->p_rtsp_url )
    {
       msg_Err( p_vod, "cannot create RTSP url (%s)",p_media->psz_rtsp_path);
       free( p_media->psz_rtsp_path );
       free( p_media );
       return NULL;
   }
   msg_Dbg( p_vod, "created RTSP url: %s", p_media->psz_rtsp_path);
   asprintf( &p_media->psz_rtsp_control_v4,
              "a=control:rtsp://%%s:%d%s/trackID=%%d/r/n",
              p_sys->i_port, p_media->psz_rtsp_path );
    asprintf(&p_media->psz_rtsp_control_v6,
              "a=control:rtsp://[%%s]:%d%s/trackID=%%d/r/n",
             p_sys->i_port, p_media->psz_rtsp_path );
   httpd_UrlCatch( p_media->p_rtsp_url, HTTPD_MSG_SETUP,
                   RtspCallback, (void*)p_media );
   httpd_UrlCatch( p_media->p_rtsp_url, HTTPD_MSG_DESCRIBE,
                   RtspCallback, (void*)p_media );
   httpd_UrlCatch( p_media->p_rtsp_url, HTTPD_MSG_PLAY,
                   RtspCallback, (void*)p_media );
   httpd_UrlCatch( p_media->p_rtsp_url, HTTPD_MSG_PAUSE,
                   RtspCallback, (void*)p_media );
   httpd_UrlCatch( p_media->p_rtsp_url, HTTPD_MSG_TEARDOWN,
                   RtspCallback, (void*)p_media );
}
static intRtspCallback( httpd_callback_sys_t *p_args, httpd_client_t*cl,
                        httpd_message_t *answer, httpd_message_t *query )
{
    switch(query->i_type )
    {
       case HTTPD_MSG_SETUP:
       {
       }
       case HTTPD_MSG_PLAY:
       {
        p_rtsp = RtspClientGet( p_media, psz_session );
        vod_MediaControl( p_vod, p_media, psz_session,VOD_MEDIA_PLAY,
                              psz_output );
         
 }
    }
          
}
5.vlc_vod.h
static inline int vod_MediaControl( vod_t*p_vod, vod_media_t *p_media,
                                   char *psz_id, int i_query, ... )
{
 i_result = p_vod->pf_media_control(p_vod->p_data, p_media, psz_id,
                                       i_query, args );
}
 
 

相关文章推荐

嵌入式 VLC源代码结构

VLC 源代码结构 译者:捞刀客 VLC源代码目录树 本节介绍VLC源代码目录树结构,以期使开发者对源代码的分布结构有一个整体的认识。下面的目录按照字母顺序列出,右边为该目录包...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:43
  • 782

嵌入式 vlc从接收到数据流到播放视频的过程分析

Vlc流播放流程  vlc源码目录树: 目录名称 说明 bindings Java, CIL 和Python绑定 doc ...
  • cds9527
  • cds9527
  • 2016年12月07日 11:33
  • 1496

嵌入式设计降低硬件功耗四法介绍

一、低功耗外围器件的选用 完成同样的功能,电路的实现形式有多种。例如,尽可能地将嵌入式系统的内部存储器RAM转换为外部的闪存FLASH,因为在同样条件下,读内部RAM比读外部FLASH会带来...

什么是嵌入式工控机及其技术发展介绍

什么是嵌入式工控机及其技术发展介绍   在工业控制上为了写软件方便,多半使用电脑主机板来用,但是由于一般商用电脑主机板对於环境的忍受度很差,并且电脑主机板使用的CPU都是x86 基础的,整个功率大概...

嵌入式文件系统ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等介绍

Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统 进行统一管理,Linux引入了虚拟文件系统VFS(Virtu...

嵌入式sqlite3数据库编程介绍

本文转自:http://www.cnblogs.com/kfqcome/archive/2011/06/27/2136999.html   一.使用流程 要使用sqlite,需要从sqlite官...

ARM嵌入式学习自顶向下平台介绍和相关说明

介绍一下学习用到的平台,外扯几句给你打气的闲话。        首先说一下开发平台。这里用到的是Windows 7 + Vmware 7.1.2 + Ubuntu 10.04(原来是9.04...

H2介绍- Java嵌入式数据库

H2是一个用Java开发的嵌入式数据库,这里指的嵌入式不是手持设备之类的,而是H2数据库作为一个类库,直接嵌入到上层的应用程序中,与应用运行在同一个进程中。 最大的优势在于可以同应用程序打包在一...

嵌入式SQL介绍

SQL语言是基于关系数据模型的语言,而高级语言是基于整数、实数、字符、记录、数组等数据类型,因此两者之间尚有很大差别。如:SQL语句不能直接使用指针、数组等数据结构,而高级语言一般不能直接进行集合运算...

单片机学习笔记--嵌入式介绍

单片机学习笔记--嵌入式介绍 嵌入式技术体系 一、 模拟电路            (电容电感电阻 二极管三极管 基本放大电路 )         数字电路             ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 vlc中vlm介绍
举报原因:
原因补充:

(最多只允许输入30个字)