zoukankan      html  css  js  c++  java
  • 用vlc SDK创建一个播放视频文件和RTSP流视频的Demo

     1 #include <stdio.h>
     2 #include <tchar.h>
     3 #include <time.h>
     4 #include <windows.h>
     5 
     6 #include <vlc/vlc.h>
     7 #pragma comment(lib, "libvlc.lib")
     8 #pragma comment(lib, "libvlccore.lib")
     9 
    10 int main(int argc, char* argv[])
    11 {
    12     libvlc_instance_t *     vlc_ins = NULL;
    13     libvlc_media_player_t * vlc_player = NULL;
    14     libvlc_media_t *        vlc_media = NULL;
    15 
    16     //创建一个vlc实例
    17     vlc_ins = libvlc_new(0,NULL);
    18 
    19     if (vlc_ins != NULL)
    20     {
    21         //从实例上创建一个VLC播放器供视频播放
    22         vlc_player = libvlc_media_player_new(vlc_ins);
    23 
    24         if (vlc_player != NULL)
    25         {
    26             //打开一个RTSP流地址,通过地址创建一个媒体实例
    27             vlc_media = libvlc_media_new_location(vlc_ins, "rtsp://218.204.223.237:554/live/1/0547424F573B085C/gsfp90ef4k0a6iap.sdp");
    28             
    29             
    30             //打开一个视频文件,通过文件创建一个媒体实例
    31             //vlc_media = libvlc_media_new_path(vlc_ins, "D:\Youku Files\transcode\test.avi");
    32 
    33             if (vlc_media != NULL)
    34             {
    35                 // 解析媒体实例
    36                 libvlc_media_parse(vlc_media);
    37                 // 获取媒体文件的播放长度,  返回 ms
    38                 libvlc_time_t duration = libvlc_media_get_duration(vlc_media);
    39 
    40                 // 此处是获取媒体包含多个的视频和音频轨以及其他类型的轨道信息
    41                 libvlc_media_track_info_t *media_tracks = NULL;
    42                 int trackCount = libvlc_media_get_tracks_info(vlc_media, &media_tracks);
    43                 // 这里是释放内存,但我测试的时候会有问题,还没仔细研究是为何
    44                 // free(media_tracks);  // crash?
    45 
    46                 // 把打开的媒体文件设置给播放器
    47                 libvlc_media_player_set_media(vlc_player, vlc_media);
    48 
    49                 // 因为是windows系统,所以需要设置一个HWND给播放器作为窗口,这里就直接使用桌面窗口,这里仅是测试
    50                 libvlc_media_player_set_hwnd(vlc_player, ::GetDesktopWindow());
    51                 // 开始播放视频
    52                 libvlc_media_player_play(vlc_player);
    53 
    54                 // 这里仅是为了打印一些信息出来,100000秒后退出
    55                 time_t last_time = time(NULL);
    56                 while ((time(NULL) < (last_time + 100000)))
    57                 {
    58                     Sleep(10);
    59                     // 获取当前播放位置
    60                     libvlc_time_t play_time = libvlc_media_player_get_time(vlc_player);
    61                     printf("playing time : %lld ms
    ", (__int64)(play_time));
    62 
    63                     // 获取媒体的状态
    64                     // libvlc_state_t media_state = libvlc_media_get_state(vlc_media);
    65                     // printf("
    media state : %d
    ", (int)(media_state));
    66                 }
    67                 // 停止
    68                 libvlc_media_player_stop(vlc_player);
    69                 // 释放
    70                 libvlc_media_release(vlc_media);
    71             }
    72 
    73             libvlc_media_player_release(vlc_player);
    74 
    75         }
    76 
    77         libvlc_release(vlc_ins);
    78     }
    79     return 0;
    80 }

     因为是建立了控制台的程序,播放RTSP流的时候控制台上打印出来了core input  error: ES_OUT_RESET_PCR called。

    播放本地AVI的时候,控制台上打印出来了core vout display error: Failed to set on top  

    google了一下,没什么问题,第一个错误消息,可能是网络上的流有什么冲突之类的。第二个错误也不是什么问题。

    references:

    http://www.bubuko.com/infodetail-782716.html

    http://blog.csdn.net/sno_guo/article/details/22388233

     http://stackoverflow.com/questions/31636150/vlclib-error-es-out-reset-pcr

    http://blog.csdn.net/friendan/article/details/45773629

     http://blog.chinaunix.net/uid-26611383-id-3789962.html

    https://github.com/kevin-shanghai/Strong_RTSP_Player

  • 相关阅读:
    Android OpenGL ES 2.0 (四) 灯光perfragment lighting
    Android OpenGL ES 2.0 (五) 添加材质
    冒泡排序函数
    javascript object 转换为 json格式 toJSONString
    Liunx CentOS 下载地址
    jquery 图片切换特效 鼠标点击左右按钮焦点图切换滚动
    javascript 解析csv 的function
    mysql Innodb Shutdown completed; log sequence number解决办法
    Centos 添加 yum
    javascript 键值转换
  • 原文地址:https://www.cnblogs.com/foohack/p/4749811.html
Copyright © 2011-2022 走看看