Code Monkey home page Code Monkey logo

ffdynamic's Introduction

Build Status

FFdynamic - Extend FFmpeg with run time control and dynamic audio/video composition

This project shipped with two parts: FFdynamic library and applications build on FFdynamic


Contents


An application Interactive Live

Interactive Live (ial for short) is an application based on FFdynamic.
Ial does multiple video and audio input mixing, then streams it out. It could be run on phones or cloud servers.

ial gives flexiable control over the mixing process (dynamical layout change, backgroup picture change, mute/unmute, etc..), shown in the following gif:

Layout auto change or set as request

Layout auto change or set to certain pattern during mixing by request

This picture shows, 1. auto layout change when a new stream joining in (from 2 cells to 3 cells); 2. layout changes to 4 and 9 cells by http requeset. Changes are quite smooth, without any frozen or stuck, due to audio/video sync message communication mechnism.

For more details(capacities, http apis, etc..), please refer to the application


Dynamic Detect example

Dynamic Detect is a playgroud one can change object detector types at run time while reading online video streams or local files. Those detectors are loaded via OpenCV api. Models of darknet yolo3, caffe vgg-ssd, and tensorflow mobilenet-ssd (all in coco dataset) are tested. Here is an output stream gif, which run 2 detecors in parallle, draw boxes and texts when they locate interested objects.

draw_detection

For more details, please refer to the application and its unit test


FFdynamic library Overview

  • Extending: FFdynamic extends FFmpeg in the manner of doing video/audio process compositionally and each component's state can be dynamically changed on the fly.
  • compositional FFdynamic is structured in a modular way. It takes each component (demux, decode, filter, encode, muxer, and cutomized component) as a building block and they can be combined together as desired at creationg time or run time.
    For instance, if we are developing a dehaze algorithm and would like to know how good the dehazed algorithm visually (in compare to original one). FFdynamic provides facilities that allow one to easily realize following composition:
Demux |-> Audio Decode -> |-> Audio Encode ------------------------------------------> |
      |                                                                                | -> Muxer
      |                   |-> Dehaze Filter -> |                                       |
      |-> Video Decode -> |                    | Mix original and dehazed ->| Encode ->|
                          | -----------------> |

As shown, after demux the input stream, we do video decode which will output to two components: 'Dehaze Filter' component and 'mix video' component; after dehaze, its image also output to 'mix video' component, in there we mix original and dehazed image into one. The whole example is here. Normally, one can freely combine components as long as the input data can be processed.

  • on the fly FFdynamic has a runtime event dispatch module, which can pass request to the component needs dynamical state change. For instance, one could set dynamical 'Key Frame' request to video encoder or 'mute' one audio stream.
    FFdynamic also has a runtime components pub-sub module, which each component can subscribe interesed events from other components. For instance, one video encoder in a live show is willing to know the region of people faces in the incoming image', so that it could set more bitrate to this region. We can do this by subscribe events to a face detecting component and get published event with ROI.
  • customization One can define their own components, for instance

    • a RTP demuxer with private fields
    • an object detection module
    • a packet sending control module

    Those components are plugins. Once they are done, they can be composed with other components.

In short, FFdynamic is a scaffold allows develop complex audio/video application in a higher and flexiable manner.
It is suitable for two kind of applications:

  • real time audio/video process: live broadcast, video conference backend, transcoding, etc.. with run time control;
  • develop new video/audio process algorithm which needs video clips as inputs and video clips as outputs, and communication or coorperation needed between video and audio streams;

Do transcoding in a dozen lines of code, see here


Here we take the 'dehaze', mentioned in the 'Overview' part, as the example. We developed a dehaze algorithm and make it a FFdynamic's component. Then mix original and dehazed image together to check the result visually.

Refer to here for plugin source files.


Installation

Dependency Required

  • FFMpeg, glog, cmake (minimal version 3.2)
  • compiler supports at least c++11
  • boost, protobuf3 (optional, only for the application 'Interactive Live')
  • opencv (optional, if you would like to run plugin example)

protobuf3 is not well supports by some linux distributions' package manager, here is a manually compiling script (sudo required):

DIR=$(mktemp -d) && cd ${DIR} && \
git clone https://github.com/protocolbuffers/protobuf.git && cd protobuf && \
git submodule update --init --recursive && \
./autogen.sh && ./configure && \
make && make check && \
sudo make install && sudo ldconfig

For Ubuntu / CentOS

Install FFmpeg as usal, then

apt install -y cmake3 libgflags-dev libgoogle-glog-dev libboost-all-dev
or 
yum install -y glog-devel gflags-devel cmake3 boost-devel  

For Mac

Install FFmpeg as usal, then
brew install cmake glog gflags protobuf boost

Docker build

To alleviate the build process, there is a docker with all dependencies installed that you can play with.

Build library and apps

    Under FFdynamic folder: 
          'sh build.sh'  will build FFdynamic library (need sudo if make install)
    Under app/interactiveLive folder: 
          'sh build.sh'  will build FFdynamic library and ial program.

Optional Dependencies - TODO

  • nvidia driver, cuda tookit, if you prefer using nvidia codec

Contribution

All contributions are welcome. Some TODOs:

  • A webui that can easily operate on Interactive Live application;
  • 'Interactive live' set video cell's border line, border color;
  • Statistics for each component, process time, latency time, detailed info, etc..;
  • An auto data format negotiate module between components;
  • Expose event register to user for easily event/data callback process;

ffdynamic's People

Contributors

xingtao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ffdynamic's Issues

Layout and Cells clarification

I'm trying to use FFDynamic for more of switching application between multiple inputs. My layout is always eSingle_1. I'm trying to figure out which of the input must be chosen for display amongst may inputs. It looks like its always the first input gets displayed. I tried with options such as ""cells" : [{"layer": -1}, {"layer":1}]" but nothing seem to change the input that is being displayed. Any help is appreciated here

Another issue that I found is with video resolution. Even though I set "avdict_encode_option": {"width" : "256", "height" : "144"}, it doesnt seem to be taking this width and height and displaying based on input resolution

Recommended server hardware (ial)

Hi,
I was testing ffdynamic On a server without gpu. I've noticed a very high cpu usage. I guess this is due to encoding/decoding (video and audio) which is very resource intensive.
Is a server with gpu (nvidia) mandatory for production ?
Is the performance gain significative with gpu? I'm tipically using ffdynamic for mcu (video room ).

What is the recommended sizing (CPU/ram) for a server ? I have a high number of inputs per room (can reach 30)

GPU is very expensive and I'd like to make sure it's necessary for an acceptable performance before buying it

Thks

rtmp视频黑屏但有声音

你好,转成rtmp输出后,用vlc播放器可以正常看到画面,但用有的播放器会显示黑屏,但有声音。能否帮忙看看什么原因,谢谢!
Metadata:
displayWidth : 1280
displayHeight : 720
fps : 0
profile :
level :
Server : Tengine
videocodecreal : 0
encoder : Lavf58.12.100
Duration: 00:00:00.00, start: 14.320000, bitrate: N/A
Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s
Stream #0:1: Video: h264 (High), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn, 2000k tbc

Failed to compile interactive live on MacOs

Version:

  1. MacOS Catalina: 10.15.6
  2. Boost: 1.73

Error

In file included from /Users/viktor/Documents/work/FFdynamic/apps/interactiveLive/ialMain.cpp:10:
In file included from /Users/viktor/Documents/work/FFdynamic/apps/interactiveLive/ialService.h:3:
In file included from /Users/viktor/Documents/work/FFdynamic/apps/interactiveLive/../appCommon/appService.h:16:
/Users/viktor/Documents/work/FFdynamic/tools/httpUtil/httpServer.h:92:83: error: 
      no member named 'get_io_service' in
      'boost::asio::basic_stream_socket<boost::asio::ip::tcp,
      boost::asio::executor>'
  ...= unique_ptr<asio::steady_timer>(new asio::steady_timer(m_socket->get_io...
     
3 warnings and 1 error generated.
make[2]: *** [CMakeFiles/ialService.dir/ialMain.cpp.o] Error 1
make[1]: *** [CMakeFiles/ialService.dir/all] Error 2
make: *** [all] Error 2

Better documentation

Hello,

This project seems valuable and unique.
However the documentation providing examples of how to use it are not sufficient.

Could you please update the documentation to include examples to run?

GPG key used in docker build is 404'd

When I run sh ./build_ial.sh, the container build fails because the given URL for the fedora GPG key (404 https://getfedora.org/static/34EC9CBA.txt) is 404'd.

#10 9.664 Public key for cpp-5.1.1-4.fc23.x86_64.rpm is not installed
#10 11.20 --------------------------------------------------------------------------------
#10 11.20 Total                                               20 MB/s |  58 MB  00:02     
#10 11.20 Retrieving key from https://getfedora.org/static/34EC9CBA.txt
#10 11.55 
#10 11.55 
#10 11.55 GPG key retrieval failed: [Errno 14] HTTPS Error 404 - Not Found

How to create multirooms or update a room from roomid

Hello,

thank you for this fantastic tool.
I'm trying to make a webui with nodejs using interactiveLive. But I'm facing an issue because it is impossible for the system to work multi users. is there a way to use multi users with this sytem? or it is just for one channel?

best regards.

How to use Interactive Live?

Hello, Xingtao.

I'm trying to use Ial(interactive live) but didn't get the results as expectation.
I ran the Ial ./ialService ialConfig.json and requested to create a room like

curl -XPOST http://127.0.0.1:8080/api1/ial/create_room -d '{"room_id" : "room1", "input_urls" : ["/root/1.mp4", "/root/2.mp4", "/root/3.mp4"], "room_output_base_url": "/root/out/"}'

then I thought I can get the resulted(merged) a video from /roo/out but I couldn't.
Could you tell me what i missed or misunderstood?

FFDynamic Compilation failed (ubuntu 18.04)

-- The CXX compiler identification is GNU 7.5.0
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1")
--** Will use pkg_config to find FFmpeg
-- Checking for module 'libavformat'
-- Found libavformat, version 57.83.100
-- Checking for module 'libavcodec'
-- Found libavcodec, version 57.107.100
-- Checking for module 'libavfilter'
-- Found libavfilter, version 6.107.100
-- Checking for module 'libavutil'
-- Found libavutil, version 55.78.100
-- Checking for module 'libswscale'
-- Found libswscale, version 4.8.100
-- Checking for module 'libswresample'
-- Found libswresample, version 2.9.100
-- pkg config lib:
-- pkg config include: /usr/include/x86_64-linux-gnu/usr/include/x86_64-linux-gnu/usr/include/x86_64-linux-gnu/usr/include/x86_64-linux-gnu/usr/include/x86_64-linux-gnu/usr/include/x86_64-linux-gnu
--** Will search FFmpeg in default dirs: /usr;/usr/local;/sw;/opt;/opt/local
--** Searching FFmpeg with dirs: /usr;/usr/local;/sw;/opt;/opt/local
-- Not Found lib FFMPEG_LIBAVFORMAT-NOTFOUND or path FFMPEG_LIBAVFORMAT_INLUCDE_DIR-NOTFOUND
-- Not Found lib FFMPEG_LIBAVCODEC-NOTFOUND or path FFMPEG_LIBAVCODEC_INLUCDE_DIR-NOTFOUND
-- Not Found lib FFMPEG_LIBAVFILTER-NOTFOUND or path FFMPEG_LIBAVFILTER_INLUCDE_DIR-NOTFOUND
-- Not Found lib FFMPEG_LIBAVUTIL-NOTFOUND or path FFMPEG_LIBAVUTIL_INLUCDE_DIR-NOTFOUND
-- Not Found lib FFMPEG_LIBSWSCALE-NOTFOUND or path FFMPEG_LIBSWSCALE_INLUCDE_DIR-NOTFOUND
-- Not Found lib FFMPEG_LIBSWRESAMPLE-NOTFOUND or path FFMPEG_LIBSWRESAMPLE_INLUCDE_DIR-NOTFOUND
ERROR_FATALFail. Not found required ffmpeg libs.
ERROR_FATAL-- Required: avformat;avcodec;avfilter;avutil;swscale;swresample
ERROR_FATAL-- But Only Found:
FATAL_ERROR,Cannot find FFmpeg::FFmpeg target.
CMake Error at CMakeLists.txt:26 (install):
install FILES given no DESTINATION!

I'm not any getting response from the HTTP

After starting the interactiveLive service i run the POST request but the http seems not working right!
I get "Empty reply from server" when i use curl means not response.

curl -XPOST http://127.0.0.1:8080/api1/ial/create_room -d '{"room_id" : "room1", "input_urls" : ["/home/site.com/webs/web.site.com/public/_stream_in/1.mp4", "/home/site.com/webs/web.site.com/public/_stream_in/2.mp4", "/home/site.com/webs/web.site.com/public/_stream_in/3.mp4"], "room_output_base_url": "/home/site.com/webs/web.site.com/public/_stream_out/", "output_stream_infos" :{"output_setting_id" : "720p_2000kb"} }'

But i get log from the interactiveLive process, i don't know what is wrong because i'm a quite newbie in c++

POST
header line --> Content-Type: application/json
header line --> User-Agent: PostmanRuntime/7.24.1
header line --> Accept: */*
header line --> Cache-Control: no-cache
header line --> Postman-Token: c663dd9f-5769-43c0-8ef2-b1ce2f10cc1b
header line --> Host: site.com:8080
header line --> Accept-Encoding: gzip, deflate, br
header line --> Connection: keep-alive
header line --> Content-Length: 467

Mixer layout details

Hi, I'm trying to mix two videos, each of which is 1920x1080, and stack them horizontally. That's just one case of several I have, so I'm trying to understand how layouts work in general. I set up a mixer with width 3840 and height 1080 (in video_mix settings in json config file), and setup output with the same (width 3840, height 1080). Then I use auto layout (also tried explicitly eHorizonal_2). It does input videos fine, however they are both heavily downscaled and put in small rectangles close to the center of resulting 3840x1080 video. What I want to achieve instead is for them to be stacked without any gaps and downscaling (first video on the left in original resolution of 1920x1080, and second video on the right, also in original resolution). I tried eLayoutSpecific but I'm not sure if it's supported yet. I also looked at code and noticed eHorizonal_2 (for example) coordinates are defined as "{{0,60},{30,30},{60,60},{60,60}}}", which is not very clear to me. Can you please help me with this issue?

How to use darknet as a plugin?

Hi, Xingtao, thank you for your answer. I am sorry to bother you. I understand that your cvDnnDetect.cpp is the image recognition part, but I don't understand how to do it. Can you recommend some information?

FFdynamic library error

I want use this library in my project , but I found some compilation error .
can you help me to use it in my project.
Xingtao can you help me if you are free ??

Cannot run from docker

Hello, first of all, thank you very much for such a fascinating project:

I got an issue while installing via docker at step 6

Total download size: 58 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
warning: /var/cache/yum/x86_64/7/warning:fedora/packages/cpp-5.1.1-4.fc23.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 34ec9cba: NOKEY
Public key for cpp-5.1.1-4.fc23.x86_64.rpm is not installed
--------------------------------------------------------------------------------
Total                                              5.7 MB/s |  58 MB  00:10     
Retrieving key from https://getfedora.org/static/34EC9CBA.txt


GPG key retrieval failed: [Errno 14] HTTPS Error 404 - Not Found
The command '/bin/sh -c yum -y update gcc gcc-c++' returned a non-zero code: 1

Could someone suggest a solution for it?

UPD: There is temporal solution to add key --nogpgcheck to the RUN command in the script, but the script is needed to be rewritten

Problem with protobuf when trying to test the ial app in a docker container (AttributeError: module 'google.protobuf.descriptor' has no attribute '_internal_create_key')

I'm trying to use the ial app in the docker container. The ialService server compiles and starts fine.

But when I try to test it with the included script, it fails with this stamge AttributeError.
I'm running the test still from the container, after having installed requests and protobuf via pip3.
(protobuf-3.11.3)

root@e6178dcc46a3:/tmp/workdir/FFdynamic/apps/interactiveLive/testScripts# python3 testIal.py

Traceback (most recent call last):
  File "testIal.py", line 10, in <module>
    import davStreamletSetting_pb2 as streamlet
  File "../build/protos/davStreamletSetting_pb2.py", line 14, in <module>
    import davWaveSetting_pb2 as davWaveSetting__pb2
  File "../build/protos/davWaveSetting_pb2.py", line 22, in <module>
    create_key=_descriptor._internal_create_key,
AttributeError: module 'google.protobuf.descriptor' has no attribute '_internal_create_key'

Any idea about how to fix this? Is it a problem with the version of protobuf I use?

Mixing streams without sound

I'm trying to mix some streams which might or might not have sound (not just silence, but absence of audio stream, only video one). I was able to mix when no streams have audio, by removing "audio_encode" entry under "output_settings" in configuiration. However, if one stream has audio and the other does not - I'm having troubles with mixing and almost every frame outputs this:

audioSyncer.cpp:76] AudioSyncer139808768794112Audio data is in future, cur 14700, desired 14700. video peer 29400, video mix 14700, audio mix 0

audioMix.cpp:206] [AudioMix-auto4] {code:-22, detail: Invalid argument, cannot allocate mixed frame data, discard one mixed frame}

My audio encode option for this case is:

"audio_encode" : {
        "encode_type" : "ffmpeg",
        "codec_name" : "aac",
        "avdict_encode_option" : {"ac" : "2", "ab" : "128k", "ar" : "44100"}
      }

Any clues?

cmake and cmake3

Hi, in the last versions of linux os the cmake3 is defined as cmake so when i want to install it in my server give the error with cmake.

how add audio output in Dynamic Detect streamlet

I study this project to edit videos, and try to write dehazor plugin and dynamic detect streamlet following the guide.
But I found that it was hard that adding the audio into the dynamic detect streamlet ,
I saw the source code and found any audio handling logic yet.
How could I add the audio raw output with the dynamic detect streamlet example ?

Install FFMPEG with required filters

I tried to build a FFMPEG on my own.

Could you share a command to compile FFMPEG, such that it will have all dependencies for FFDynamic?

Now I have an issue:

-- pkg config include: /usr/include/x86_64-linux-gnu
--** Will search FFmpeg in default dirs: /usr;/usr/local;/sw;/opt;/opt/local
--** Searching FFmpeg with dirs: /usr;/usr/local;/sw;/opt;/opt/local
-- Not Found lib FFMPEG_LIBAVFORMAT-NOTFOUND or path FFMPEG_LIBAVFORMAT_INLUCDE_DIR-NOTFOUND
-- Not Found lib FFMPEG_LIBAVCODEC-NOTFOUND or path FFMPEG_LIBAVCODEC_INLUCDE_DIR-NOTFOUND
-- Not Found lib FFMPEG_LIBAVFILTER-NOTFOUND or path FFMPEG_LIBAVFILTER_INLUCDE_DIR-NOTFOUND
-- Not Found lib FFMPEG_LIBAVUTIL-NOTFOUND or path FFMPEG_LIBAVUTIL_INLUCDE_DIR-NOTFOUND
-- Not Found lib FFMPEG_LIBSWSCALE-NOTFOUND or path FFMPEG_LIBSWSCALE_INLUCDE_DIR-NOTFOUND
-- Not Found lib FFMPEG_LIBSWRESAMPLE-NOTFOUND or path FFMPEG_LIBSWRESAMPLE_INLUCDE_DIR-NOTFOUND
ERROR_FATALFail. Not found required ffmpeg libs.
ERROR_FATAL-- Required: avformat;avcodec;avfilter;avutil;swscale;swresample
ERROR_FATAL-- But Only Found: 
FATAL_ERROR,Cannot find FFmpeg::FFmpeg target.
--** Will use pkg_config to find Glog
-- Checking for module 'libglog'
--   Found libglog, version 0.3.5

DavImplRegister

DavImplRegister g_videoEncodeReg(DavWaveClassVideoEncode(),vector({"auto", "ffmpeg"}),
[](const DavWaveOption & options) -> unique_ptr {
unique_ptr p(new FFmpegVideoEncode(options));
return p;
});

can any one explain why is it showing no matching constructor ?

How to change the output of the video to rtmp

Hello, I am a machine learning enthusiast. I just read the project you wrote. It is very good. There are many places worth learning. I want to know how to write the results of onProcess to rtmp. I ran your program and found that the video will be written to disk after about 3 seconds of processing. I want to know how to change it directly to rtmp, in output_url.

Decklink output?

Say I have a good compile of ffmpeg, that plays out a Blackmagic design Decklink board good with a line like:

ffmpeg -i /home/matt/VideoTests/720ts_6DK01H_tru720og.ts -pix_fmt uyvy422 -f decklink -vcodec v210 "DeckLink SDI 4K"

Can FFdynamic also play out the Decklink? If so, what would streamletOutput / outputBuilder config look like?

Thanks!

output to rtmp does not have video

Hello,

I've been testing davTests/streamletMixTest.cpp example and it works fine when the output is a file. Howver when i tried to change output url to rtmp (publish to local nginx_rtmp service) .

I got only audio when i playback in vlc. for output file it's fine.

Is there an option i'm missing? I just added this muxOption2.set(DavOptionContainerFmt(), "flv"); to get output works however i still have no video

Thank you very much

Error while linking cxx executable ialservice

Hello,
I'm on Raspbian 10
I have the following problem:
when I execute the build.sh in the interactive live folder, then it gives a error here:

[ 65%] Linking CXX executable ialService
/usr/bin/ld: FFdynamic/libffdynamic.so: undefined reference to lzma_stream_decoder' /usr/bin/ld: FFdynamic/libffdynamic.so: undefined reference to lzma_code'
/usr/bin/ld: FFdynamic/libffdynamic.so: undefined reference to `lzma_end'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/ialService.dir/build.make:124: ialService] Error 1
make[1]: *** [CMakeFiles/Makefile2:74: CMakeFiles/ialService.dir/all] Error 2
make: *** [Makefile:130: all] Error 2

How to fix it?

Error build ubuntu

  Target "ffdynamic" links to target "FFmpeg::FFmpeg" but the target was not
  found.  Perhaps a find_package() call is missing for an IMPORTED target, or
  an ALIAS target is missing?


CMake Error at davTests/CMakeLists.txt:4 (add_executable):
  Target "simpleTranscode" links to target "FFmpeg::FFmpeg" but the target
  was not found.  Perhaps a find_package() call is missing for an IMPORTED
  target, or an ALIAS target is missing?


CMake Error at davTests/CMakeLists.txt:3 (add_executable):
  Target "streamletMixerTest" links to target "FFmpeg::FFmpeg" but the target
  was not found.  Perhaps a find_package() call is missing for an IMPORTED
  target, or an ALIAS target is missing?


CMake Error at davTests/CMakeLists.txt:2 (add_executable):
  Target "avMixerTest" links to target "FFmpeg::FFmpeg" but the target was
  not found.  Perhaps a find_package() call is missing for an IMPORTED
  target, or an ALIAS target is missing?


CMake Error at davTests/CMakeLists.txt:1 (add_executable):
  Target "filterTest" links to target "FFmpeg::FFmpeg" but the target was not
  found.  Perhaps a find_package() call is missing for an IMPORTED target, or
  an ALIAS target is missing?


CMake Error at CMakeLists.txt:65 (add_library):
  Target "ffdynamic" links to target "FFmpeg::FFmpeg" but the target was not
  found.  Perhaps a find_package() call is missing for an IMPORTED target, or
  an ALIAS target is missing?

Ffmpeg installing

nikell@work:~/FFdynamic/FFdynamic$ ffmpeg
ffmpeg version 4.2.7-0ubuntu0.1 Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
  configuration: --prefix=/usr --extra-version=0ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'

RTMP lose connect

i use ialservice,to push rtmp to a rtmp server。when i close one input url (rtmp),ial_server in a error

E0511 08:26:39.597858 71915 davProc.cpp:174] [Mux-ffmpeg3] {code:-32, detail: Broken pipe, Fail with proc one frame; try again}

i think rtmp connect is broken, then i try to reconnect by onDynamicallyInitializeViaTravelStatic . it works ,but when i add a new input url by pytest, a new trouble comes out

"AudioSyncer140734468460848Audio data is in future, cur 802202, desired 799262. video peer 1268610, video mix 1337700, audio mix 868352"

Doesn't compile with Clang

DavTransmitor::curLoadNum does not compile on Clang. It also doesn't compile on GCC, but only if you actually instantiate the template (the rest of FFdynamic is usable so long as you don't use DavTransmitor).

The reason is that curLoadNum is a const method, but it locks a mutex (which changes its state).

inline size_t curLoadNum() const noexcept {
        std::lock_guard<std::mutex> lock(m_mutex); // <----- 1st argument ('const std::mutex') would lose const qualifier
        return m_loads.size();
}

It can be fixed by marking m_mutex as mutable, which will allow it to be changed in const methods.

编译安装失败

系统:ubuntu 16.04
环境:已经安要求安装 FFMpeg, glog, cmake,oost, protobuf3

一 : 执行/FFdynamic/FFdynamic目录下的 build.sh

出现以下异常
[ 65%] Building CXX object CMakeFiles/ffdynamic.dir/davStreamlet/davStreamletBuilder.cpp.o
[ 68%] Building CXX object CMakeFiles/ffdynamic.dir/davTools/audioResample/audioResample.cpp.o
[ 70%] Building CXX object CMakeFiles/ffdynamic.dir/davTools/globalSignalHandle/globalSignalHandle.cpp.o
[ 73%] Linking CXX shared library libffdynamic.so
/usr/bin/ld: /usr/local/lib/libavformat.a(aviobuf.o): relocation R_X86_64_32 against `ffurl_context_class' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavformat.a: 无法添加符号: 错误的值
collect2: error: ld returned 1 exit status
CMakeFiles/ffdynamic.dir/build.make:829: recipe for target 'libffdynamic.so' failed
make[2]: *** [libffdynamic.so] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/ffdynamic.dir/all' failed
make[1]: *** [CMakeFiles/ffdynamic.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2

二:尝试执行/FFdynamic/apps/interactiveLive 目录下的build.sh

出现以下异常
[ 58%] Building CXX object FFdynamic/CMakeFiles/ffdynamic.dir/davTools/globalSignalHandle/globalSignalHandle.cpp.o
[ 59%] Linking CXX shared library libffdynamic.so
/usr/bin/ld: /usr/local/lib/libavformat.a(aviobuf.o): relocation R_X86_64_32 against `ffurl_context_class' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavformat.a: 无法添加符号: 错误的值
collect2: error: ld returned 1 exit status
FFdynamic/CMakeFiles/ffdynamic.dir/build.make:829: recipe for target 'FFdynamic/libffdynamic.so' failed
make[2]: *** [FFdynamic/libffdynamic.so] Error 1
CMakeFiles/Makefile2:125: recipe for target 'FFdynamic/CMakeFiles/ffdynamic.dir/all' failed
make[1]: *** [FFdynamic/CMakeFiles/ffdynamic.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2
想问下,可能是什么愿意导致的?

Technical support

Hi Xingtao,

Great tool!

I was wondering, would you be also open to provide payed support for business users?

Empty output file

Hi! First of, thanks for the project!

I'm having some issues testing the IAL app.

Here are the requests I'm sending:

wget 127.0.0.1:8080/api1/ial/create_room --post-data '{"room_id":"test", "input_urls":["/srv/resources/video.mp4", "/srv/resources/video.copy.mp4"], "room_output_base_url": "/srv/resources/", "output_stream_infos": [{"output_setting_id": "720p_2000kb"}]}'

and

wget 127.0.0.1:8080/api1/ial/create_room --post-data '{"room_id":"test", "input_urls":["/srv/resources/video.mp4", "/srv/resources/video.copy.mp4"], "room_output_base_url": "/srv/resources/", "output_stream_infos": [{"output_setting_id": "1080p_4000kb", "output_urls": ["/srv/resources/output_1080p.flv"]} ]}'

Both requests generate an empty output file (zero bytes).

ffprobe -show_format test_720p_2000kb_0
test_720p_2000kb_0: Invalid data found when processing input

ffprobe -show_format output_1080p.flv
output_1080p.flv: Invalid data found when processing input

There are no errors in the logs. However there are some "invalid argument" in the muxer section:

appService.cpp:140] [FFMPEG][mpegts]Application provided invalid, non monotonically increasing dts to muxer in stream 0: -3000 >= -3000
ffmpegMux.cpp:99] [Mux-ffmpeg3] {code:-22, detail: Invalid argument, mux do interleave write fail}
davImpl.cpp:96] [Mux-ffmpeg3] {code:-22, detail: Invalid argument, Invalid argument, mux do interleave write fail}
davProc.cpp:166] [Mux-ffmpeg3] {code:-1229211973, detail: Imp - failed on dynamic initialization, Fail with proc's process, quit proc thread. Invalid argument, Invalid argument, mux do interleave write fail}

Also the last log shows empty stat:

out stat: {}}

Any idea of what could be the problem?

I'm using the provided config file.

Also here are some info about ffmpeg and the input:

ffprobe -show_format video.mp4
ffprobe version 4.0.6 Copyright (c) 2007-2020 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.3.0-17ubuntu1~20.04)
  configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-fontconfig --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxcb --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --enable-libbluray --enable-libzmq --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-libopenjpeg --enable-libkvazaar --enable-libaom --extra-libs=-lpthread --enable-libsrt --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib
  libavutil      56. 14.100 / 56. 14.100
  libavcodec     58. 18.100 / 58. 18.100
  libavformat    58. 12.100 / 58. 12.100
  libavdevice    58.  3.100 / 58.  3.100
  libavfilter     7. 16.100 /  7. 16.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  1.100 /  5.  1.100
  libswresample   3.  1.100 /  3.  1.100
  libpostproc    55.  1.100 / 55.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2016-01-21T17:26:11.000000Z
  Duration: 00:00:30.05, start: 0.000000, bitrate: 1495 kb/s
  Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 1301 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 192 kb/s (default)
    Metadata:
      creation_time   : 2016-01-21T17:26:11.000000Z
      handler_name    : IsoMedia File Produced by Google, 5-11-2011
      vendor_id       : [0][0][0][0]
[FORMAT]
filename=video.mp4
nb_streams=2
nb_programs=0
format_name=mov,mp4,m4a,3gp,3g2,mj2
format_long_name=QuickTime / MOV
start_time=0.000000
duration=30.045000
size=5617101
bit_rate=1495650
probe_score=100
TAG:major_brand=mp42
TAG:minor_version=0
TAG:compatible_brands=isommp42
TAG:creation_time=2016-01-21T17:26:11.000000Z
[/FORMAT]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.