vlc中vlm介绍

转载 2012年03月29日 16:00:38
概述
代码从两大部分入手,一个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
/*****************************************************************************
 * Run: main loop
 *****************************************************************************/
static void Run( intf_thread_t *p_intf ){
 vlm_ExecuteCommand( p_sys->mediatheque, cl->buffer_read,
                                         &message );
}
2. /src/Misc/vlm.c 
/*****************************************************************************
 * vlm_ExecuteCommand:
 *****************************************************************************/
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;      /* thread descriptor */ 
 p_input = Create( p_parent, p_item, psz_header, VLC_FALSE );
 /* Now we can attach our new input */
 vlc_object_attach( p_input, p_parent );
 
 /* Create thread and wait for its readiness. */
 if( vlc_thread_create( p_input, "input", Run,
                            VLC_THREAD_PRIORITY_INPUT, VLC_TRUE ) )
 {
  msg_Err( p_input, "cannot create input thread" );
  vlc_object_detach( p_input );
  vlc_object_destroy( p_input );
  return NULL;
 }
}
static input_thread_t *Create( vlc_object_t *p_parent, input_item_t *p_item,
                               char *psz_header, vlc_bool_t b_quick )
{
}
/*****************************************************************************
 * Run: main thread loop
 * This is the "normal" thread that spawns the input processing chain,
 * reads the stream, cleans up and waits
 *****************************************************************************/
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) );
    int i;
    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 int RtspCallback( 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 );
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tedyxuan/archive/2006/08/28/1133149.aspx

VLC用作视频点播服务器设置

1. 打开CMD窗口,切换到VLC的安装目录,输入以下命令: vlc --ttl 12 -vvv --color -I telnet --rtsp-host 127.0.0.1:8000 2....

vlc的RTP播放 (VOD mode)终于试成功了,哥给跪了

2012.3.19 上周发烧感冒了,头痛了两天,结果几乎什么都没做,调整好身体。当时都有点想以后不干码农了,找家国企混算了。 不瞎扯了,入正题。 参考的资料如下: http://wik...

vlc 代码分析(2)——vlc中vlm介绍

概述代码从两大部分入手,一个telnet 的deamon。还有就是rtsp的实现部分 。结果发现,他们通过了一个桥梁vlm的media进行沟通。 当受到new MEDIANAME vod ena...

嵌入式 vlc中vlm介绍

概述 代码从两大部分入手,一个telnet 的deamon。还有就是rtsp的实现部分 。结果发现,他们通过了一个桥梁vlm的media进行沟通。 当受到new MEDIANAME vod ena...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:43
  • 692

使用ORACLE10G VLM特性 使32位ORACLE突破1.7G SGA限制

最近公司在中心机房新增一台数据库用来存储解析前的原始数据使用,由于对该数据的安全性和实用性要求不高故采用了浪潮的英信系列服务器作为数据库服务器。考虑到数据库的性能,公司给该服务器配置了4G内存,由于一...
  • jlds123
  • jlds123
  • 2011年11月03日 10:12
  • 1355

VLM(基于linux磁盘容量修改)

  • 2012年03月03日 09:00
  • 595KB
  • 下载

Implementing Address Windowing Extensions (AWE) or VLM on 32-bit Windows Platforms [ID 225349.1]

Applies to: Oracle Server - Enterprise Edition Microsoft Windows (32-bit) Purpose To address th...

【转】Hugepage、VLM、SGA和Share memory

一、相关概念Hugepage/Big page:系统进程是通过虚拟地址访问内存,但是CPU必须把它转换程物理内存地址才能真正访问内存。为了提高这个转换效率,CPU会缓存最近的虚拟内存地址和物理内存地址...
  • karlxu
  • karlxu
  • 2011年03月02日 21:41
  • 516

Hugepage、VLM、SGA和Share memory

Hugepage、VLM、SGA和Share memory由于新数据库环境使用了一些VLM、hugepage相关的一些技术,因此花了几天时间研究了一些这些东西,并记录与大家分享。如有不对之处请指出。一...

VLC搭建RTSP直播流,图文介绍

将一个视频转成rtsp流,通过vlc播放器,搭建一个rtsp服务器,让rtsp客户端去访问这个视频的rtsp流 1 需要有vlc播放器,我的版本如下 2  媒体 -->  流 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vlc中vlm介绍
举报原因:
原因补充:

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