Guest User

Untitled

a guest
Jan 30th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.54 KB | None | 0 0
  1. #include <Mlt.h>
  2. #include <iostream>
  3. #include <vector>
  4. #include <time.h>
  5.  
  6. using namespace Mlt;
  7. using namespace std;
  8.  
  9. #include <sys/time.h>
  10.  
  11. double getElaspedTime(const timeval &tv1);
  12.  
  13. int progress() {
  14.     Factory::init();
  15.     Profile profile("atsc_1080p_30");
  16.  
  17.     Tractor* tractor = new Tractor();
  18.     vector<Producer*> producers;
  19.     producers.emplace_back(new Producer(profile,"avformat:rtsp://192.168.13.114:554/axis-media/media.amp?rtsp_transport=tcp&videocodec=h264&resolution=1920x1080") );
  20.     producers.emplace_back(new Producer(profile,"avformat:rtsp://192.168.13.103:554/axis-media/media.amp?rtsp_transport=tcp&videocodec=h264&resolution=1920x1080") );
  21.     producers.emplace_back(new Producer(profile,"avformat:rtsp://192.168.13.115:554/axis-media/media.amp?rtsp_transport=tcp&videocodec=h264&resolution=1920x1080") );
  22.  
  23.     for(int a=0;a<producers.size();a++){
  24.         tractor->multitrack()->connect(*producers[a],a);
  25.     }
  26.     Consumer* consumer = new Consumer(profile,"avformat");
  27.     system("/usr/local/nginx/sbin/nginx -s stop");
  28.     system("sleep 1");
  29.     system("/usr/local/nginx/sbin/nginx");
  30.     consumer->set("target", "rtmp://localhost:1935/ps/main");
  31.  
  32.     consumer->set("f", "flv");
  33.  
  34.     consumer->set("vcodec", "libx264");
  35.     consumer->set("pix_fmt", "yuv420p");
  36.     consumer->set("r", 30);
  37.     consumer->set("g", 2 * 30);
  38.     consumer->set("bf", 0);
  39.     consumer->set("vb", 6000 * 1000);
  40.     consumer->set("acodec", "aac");
  41.     consumer->set("ar", 48000);
  42.     consumer->set("b:a", "128k");
  43.     consumer->set("bf", 0);
  44.  
  45.     consumer->connect(*tractor);
  46.     consumer->start();
  47.  
  48.     struct timeval  tv1;
  49.     gettimeofday(&tv1, nullptr);
  50.     for(int a=0;a<15000;a++){
  51.         int pos = consumer->position();
  52.         double elaspedTime = getElaspedTime(tv1);
  53.         double timeShouldBe = consumer->position() / 30.0;
  54.  
  55.         if(consumer->position() == 2000){
  56.             tractor->multitrack()->disconnect(1);
  57.             tractor->multitrack()->connect(*producers[1],producers.size()-1);
  58.         }
  59.  
  60.         cout << "[" << a << "]delay:" << (elaspedTime-timeShouldBe) << endl;
  61.         while(pos == consumer->position());
  62.     }
  63.     consumer->stop();
  64.  
  65.     Factory::close();
  66.     return 0;
  67. }
  68.  
  69. double getElaspedTime(const timeval &tv1) {
  70.     struct timeval tv2;
  71.     gettimeofday(&tv2, nullptr);
  72.     double elaspedTime = (double) (tv2.tv_usec - tv1.tv_usec) / 1000000 +
  73.                (double) (tv2.tv_sec - tv1.tv_sec);
  74.     return elaspedTime;
  75. }
  76.  
  77.  
  78. int main( int argc, char **argv ){
  79.     progress();
  80. }
Add Comment
Please, Sign In to add comment