2013-04-24 2 views
4

Я хочу передать часть экрана с помощью библиотеки vlc. Я написал небольшой пример:libvlc stream часть экрана

#include <iostream> 
#include <cstdlib> 

#include <vlc/vlc.h> 


int main(int argc, char**argv) 
{ 
    libvlc_instance_t * inst = libvlc_new(argc, argv); 
    libvlc_vlm_add_broadcast(inst, "mybroad", 
      "screen://", "#transcode{vcodec=h264, venc=x264,vb=0,scale=0, acodec=mpga,ab=128,channels=2, samplerate=44100}:http{mux=ffmpeg{mux=flv}, dst=:7777/}", 
      0, NULL, 1, 0); 
    libvlc_vlm_play_media(inst, "mybroad"); 
    std::cout << "ready" << std::endl; 
    // next two lines - it just for waitint 
    int i; 
    std::cin >> i; 
    // omit the code that frees libvlc 
    return 0; 
} 

Этот код передает весь мой экран. я могу транслировать часть экрана, если я делаю это в консоли:

vlc -I "dummy" screen:// --screen-left=0 --screen-top=0 \ 
    --screen-width=640 --screen-height=480 \ 
    --screen-fps=1 \ 
    --sout '#transcode{vcodec=h264,vb=800,scale=1,\ 
    acodec=mpga,ab=128,channels=2,\ 
    samplerate=44100}:http{mux=ts,dst=:7777/}' 

I судимое сделать это в коде необходимости модифицировать одну строку:

libvlc_vlm_add_broadcast(inst, "mybroad", 
       "screen:// :screen-fps=24 :screen-top=0 :screen-left=0 :screen-width=320 :screen-height=240", 
       "#transcode{vcodec=h264,venc=x264, vb=0,scale=0,acodec=mpga,ab=128,channels=2, samplerate=44100}:http{mux=ffmpeg{mux=flv},dst=:7777/}", 
       0, NULL, 1, 0); 

Но эта модификация ничего не изменилось.

Честно говоря, я хочу передавать с одного монитора (у меня есть два монитора), но я могу рассчитать границы мониторов.

ответ

6

Я нашел решение.

#include <iostream> 
#include <cstdlib> 

#include <vlc/vlc.h> 


int main(int argc, char**argv) 
{ 
    // the array with parameters 
    const char* params[] = {"screen-top=0", 
          "screen-left=0", 
          "screen-width=640", 
          "screen-height=480", 
          "screen-fps=10"}; 
    libvlc_instance_t * inst = libvlc_new(argc, argv); 
    libvlc_vlm_add_broadcast(inst, "mybroad", 
      "screen://", 
      "#transcode{vcodec=h264,vb=800,scale=1,acodec=mpga,ab=128,channels=2,samplerate=44100}:http{mux=ts,dst=:7777/}", 
      5, params, // <= 5 == sizeof(params) == count of parameters 
      1, 0); 
    libvlc_vlm_play_media(inst, "mybroad"); 
    std::cout << "ready" << std::endl; 
    int i; 
    std::cin >> i; 
    return 0; 
} 
+0

Не следует ли 'params' (в' const char * params [] ... ') быть' param'? –

+0

Да, это правда. – KoVadim

+0

Почему я запускаю эту программу «главная ошибка vlm daemon: недопустимое описание мультимедиа»? – Vigo

Смежные вопросы