|  | 
|  | 1 | +# FFmpeg-Encoder-Decoder-for-Python | 
|  | 2 | + | 
|  | 3 | +## Update Report | 
|  | 4 | + | 
|  | 5 | +### V3.2.4 @ 4/24/2022 | 
|  | 6 | + | 
|  | 7 | +1. Fix a bug when `tqdm<4.40.0` is installed. Previously, this problem should not trigger if `tqdm>4.40.0` is installed, or `tqdm` is not installed. | 
|  | 8 | + | 
|  | 9 | +2. Fix the same bug (mentioned by item 1) in the `setup.py` script. | 
|  | 10 | + | 
|  | 11 | +3. Add change logs. | 
|  | 12 | + | 
|  | 13 | +### V3.2.3 @ 4/22/2022 | 
|  | 14 | + | 
|  | 15 | +1. Fix a severe bug that causes the dependencies to be downloaded repeatedly. | 
|  | 16 | + | 
|  | 17 | +### V3.2.2 @ 4/22/2022 | 
|  | 18 | + | 
|  | 19 | +1. Fix a typo: `mpegCoder.__verion__` -> `mpegCoder.__version__`. | 
|  | 20 | + | 
|  | 21 | +### V3.2.1 @ 4/22/2022 | 
|  | 22 | + | 
|  | 23 | +1. Fix an issue caused by the missing dependency `libcrypto.so.1.1`. This fixture is only required by the Linux version. | 
|  | 24 | + | 
|  | 25 | +2. Format the PyPI release script. | 
|  | 26 | + | 
|  | 27 | +### V3.2.0 @ 4/8/2022 | 
|  | 28 | + | 
|  | 29 | +1. Upgrade to `FFMpeg 5.0` version. | 
|  | 30 | + | 
|  | 31 | +2. Fix the const assignment bug caused by the codec configuration method. | 
|  | 32 | + | 
|  | 33 | +3. (Only for Linux) Upgrade the dependencies of FFMpeg to the newest versions ([#4](https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/issues/4)). | 
|  | 34 | + | 
|  | 35 | +4. (About PyPI) Change the behavior of the PYPI `.whl` release. Now the dependencies will not be packed into `.whl` directly. When users `import mpegCoder` for the first time, the dependency will be automatically downloaded. Please ensure that you have the authority to modify the `site-packages` folder when you import `mpegCoder` for the first time. | 
|  | 36 | + | 
|  | 37 | +### V3.1.0 @ 7/23/2021 | 
|  | 38 | + | 
|  | 39 | +1. Support `str()` type for all string arguments. | 
|  | 40 | + | 
|  | 41 | +2. Support `http`, `ftp`, `sftp` streams for `MpegServer`. | 
|  | 42 | + | 
|  | 43 | +3. Support `nthread` option for `MpegDecoder`, `MpegEncoder`, `MpegClient` and `MpegServer`. | 
|  | 44 | + | 
|  | 45 | +4. Fix a bug caused by the constructor `MpegServer()`. | 
|  | 46 | + | 
|  | 47 | +5. Clean up all `gcc` warnings of the source codes. | 
|  | 48 | + | 
|  | 49 | +6. Fix typos in docstrings. | 
|  | 50 | + | 
|  | 51 | +### V3.0.0 update report | 
|  | 52 | + | 
|  | 53 | +1. Fix a severe memory leaking bugs when using `AVPacket`. | 
|  | 54 | + | 
|  | 55 | +2. Fix a bug caused by using `MpegClient.terminate()` when a video is closed by the server. | 
|  | 56 | + | 
|  | 57 | +3. Support the `MpegServer`. This class is used for serving the online video streams. | 
|  | 58 | + | 
|  | 59 | +4. Refactor the implementation of the loggings. | 
|  | 60 | + | 
|  | 61 | +5. Add `getParameter()` and `setParameter(configDict)` APIs to `MpegEncoder` and `MpegServer`. | 
|  | 62 | + | 
|  | 63 | +6. Move `FFMpeg` depedencies and the `OutputStream` class to the `cmpc` space. | 
|  | 64 | + | 
|  | 65 | +7. Fix dependency issues and cpp standard issues. | 
|  | 66 | + | 
|  | 67 | +8. Upgrade to `FFMpeg 4.4` Version. | 
|  | 68 | + | 
|  | 69 | +9. Add a quick script for fetching the `FFMpeg` dependencies. | 
|  | 70 | + | 
|  | 71 | +### V2.05 update report | 
|  | 72 | + | 
|  | 73 | +1. Fix a severe bug that causes the memory leak when using `MpegClient`.This bug also exists in `MpegDecoder`, but it seems that the bug would not cause memory leak in that case. (Although we have also fixed it now.) | 
|  | 74 | + | 
|  | 75 | +2. Upgrade to `FFMpeg 4.0` Version. | 
|  | 76 | + | 
|  | 77 | +### V2.01 update report | 
|  | 78 | + | 
|  | 79 | +1. Fix a bug that occurs when the first received frame may has a PTS larger than zero. | 
|  | 80 | + | 
|  | 81 | +2. Enable the project produce the newest `FFMpeg 3.4.2` version and use `Python 3.6.4`, `numpy 1.14`.  | 
|  | 82 | + | 
|  | 83 | +### V2.0 update report | 
|  | 84 | + | 
|  | 85 | +1. Revise the bug of the encoder which may cause the stream duration is shorter than the real duration of the video in some not advanced media players. | 
|  | 86 | + | 
|  | 87 | +2. Improve the structure of the code and remove some unnecessary codes. | 
|  | 88 | + | 
|  | 89 | +3. Provide a complete version of client, which could demux the video stream from a server in any network protocol. | 
|  | 90 | + | 
|  | 91 | +### V1.8 update report | 
|  | 92 | + | 
|  | 93 | +1. Provide options `(widthDst, heightDst)` to let `MpegDecoder` could control the output size manually. To ensure the option is valid, we must use the method `setParameter` before `FFmpegSetup`. Now you could use this options to get a rescaled output directly: | 
|  | 94 | + | 
|  | 95 | +    ```python | 
|  | 96 | +    d = mpegCoder.MpegDecoder() # initialize | 
|  | 97 | +    d.setParameter(widthDst=400, heightDst=300) # noted that these options must be set before 'FFmpegSetup'!  | 
|  | 98 | +    d.FFmpegSetup(b'i.avi') # the original video size would not influence the output | 
|  | 99 | +    print(d) # examine the parameters. You could also get the original video size by 'getParameter' | 
|  | 100 | +    d.ExtractFrame(0, 100) # get 100 frames with 400x300 | 
|  | 101 | +    ``` | 
|  | 102 | + | 
|  | 103 | +    In another example, the set optional parameters could be inherited by encoder, too: | 
|  | 104 | + | 
|  | 105 | +    ```python | 
|  | 106 | +    d.setParameter(widthDst=400, heightDst=300) # set optional parameters | 
|  | 107 | +    ... | 
|  | 108 | +    e.setParameter(decoder=d) # the width/height would inherit from widthDst/heightDst rather than original width/height of the decoder. | 
|  | 109 | +    ``` | 
|  | 110 | + | 
|  | 111 | +    Noted that we do not provide `widthDst`/`heightDst` in `getParameter`, because these 2 options are all set by users. There is no need to get them from the video metadata.  | 
|  | 112 | + | 
|  | 113 | +2. Optimize some realization of Decoder so that its efficiency could be improved. | 
|  | 114 | + | 
|  | 115 | +### V1.7-linux update report | 
|  | 116 | + | 
|  | 117 | +Thanks to God, we succeed in this work! | 
|  | 118 | + | 
|  | 119 | +A new version is avaliable for Linux. To implement this tool, you need to install some libraries firstly: | 
|  | 120 | + | 
|  | 121 | +* python3.5 | 
|  | 122 | + | 
|  | 123 | +* numpy 1.13 | 
|  | 124 | + | 
|  | 125 | +If you want, you could install `ffmpeg` on Linux: Here are some instructions | 
|  | 126 | + | 
|  | 127 | +1. Check every pack which ffmpeg needs here: [Dependency of FFmpeg](https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu "Dependency of FFmpeg") | 
|  | 128 | + | 
|  | 129 | +2. Use these steps to install ffmpeg instead of provided commands on the above site. | 
|  | 130 | + | 
|  | 131 | +```Bash | 
|  | 132 | +git clone https://git.ffmpeg.org/ffmpeg.git | 
|  | 133 | +cd ffmpeg | 
|  | 134 | +./configure --prefix=host --enable-gpl --enable-libx264 --enable-libx265 --enable-shared --disable-static --disable-doc | 
|  | 135 | +make | 
|  | 136 | +make install | 
|  | 137 | +``` | 
|  | 138 | + | 
|  | 139 | +### V1.7 update report | 
|  | 140 | + | 
|  | 141 | +1. Realize the encoder totally. | 
|  | 142 | + | 
|  | 143 | +2. Provide a global option `dumpLevel` to control the log shown in the screen. | 
|  | 144 | + | 
|  | 145 | +3. Fix bugs in initialize functions. | 
|  | 146 | + | 
|  | 147 | +### V1.5 update report | 
|  | 148 | + | 
|  | 149 | +1. Provide an incomplete version of encoder, which could encode frames as a video stream that could not be played by player. | 
|  | 150 | +  | 
|  | 151 | +### V1.4 update report | 
|  | 152 | + | 
|  | 153 | +1. Fix a severe bug of the decoder, which causes the memory collapsed if decoding a lot of frames. | 
|  | 154 | +  | 
|  | 155 | +### V1.2 update report | 
|  | 156 | + | 
|  | 157 | +1. Use numpy array to replace the native pyList, which improves the speed  significantly. | 
|  | 158 | +  | 
|  | 159 | +### V1.0 update report | 
|  | 160 | + | 
|  | 161 | +1. Provide the decoder which could decode videos in arbitrary formats and arbitrary coding. | 
0 commit comments