Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Mlt.h>
- #include <iostream>
- #include <vector>
- #include <time.h>
- using namespace Mlt;
- using namespace std;
- #include <sys/time.h>
- double getElaspedTime(const timeval &tv1);
- int progress() {
- Factory::init();
- Profile profile("atsc_1080p_30");
- Tractor* tractor = new Tractor();
- vector<Producer*> producers;
- producers.emplace_back(new Producer(profile,"avformat:rtsp://192.168.13.114:554/axis-media/media.amp?rtsp_transport=tcp&videocodec=h264&resolution=1920x1080") );
- producers.emplace_back(new Producer(profile,"avformat:rtsp://192.168.13.103:554/axis-media/media.amp?rtsp_transport=tcp&videocodec=h264&resolution=1920x1080") );
- producers.emplace_back(new Producer(profile,"avformat:rtsp://192.168.13.115:554/axis-media/media.amp?rtsp_transport=tcp&videocodec=h264&resolution=1920x1080") );
- for(int a=0;a<producers.size();a++){
- tractor->multitrack()->connect(*producers[a],a);
- }
- Consumer* consumer = new Consumer(profile,"avformat");
- system("/usr/local/nginx/sbin/nginx -s stop");
- system("sleep 1");
- system("/usr/local/nginx/sbin/nginx");
- consumer->set("target", "rtmp://localhost:1935/ps/main");
- consumer->set("f", "flv");
- consumer->set("vcodec", "libx264");
- consumer->set("pix_fmt", "yuv420p");
- consumer->set("r", 30);
- consumer->set("g", 2 * 30);
- consumer->set("bf", 0);
- consumer->set("vb", 6000 * 1000);
- consumer->set("acodec", "aac");
- consumer->set("ar", 48000);
- consumer->set("b:a", "128k");
- consumer->set("bf", 0);
- consumer->connect(*tractor);
- consumer->start();
- struct timeval tv1;
- gettimeofday(&tv1, nullptr);
- for(int a=0;a<15000;a++){
- int pos = consumer->position();
- double elaspedTime = getElaspedTime(tv1);
- double timeShouldBe = consumer->position() / 30.0;
- if(consumer->position() == 2000){
- tractor->multitrack()->disconnect(1);
- tractor->multitrack()->connect(*producers[1],producers.size()-1);
- }
- cout << "[" << a << "]delay:" << (elaspedTime-timeShouldBe) << endl;
- while(pos == consumer->position());
- }
- consumer->stop();
- Factory::close();
- return 0;
- }
- double getElaspedTime(const timeval &tv1) {
- struct timeval tv2;
- gettimeofday(&tv2, nullptr);
- double elaspedTime = (double) (tv2.tv_usec - tv1.tv_usec) / 1000000 +
- (double) (tv2.tv_sec - tv1.tv_sec);
- return elaspedTime;
- }
- int main( int argc, char **argv ){
- progress();
- }
Add Comment
Please, Sign In to add comment