[Libav-user] mjr to opus audio conversion - corrupted results

Mateusz Koslacz mateusz.koslacz at 4vod.tv
Thu Jul 9 15:51:39 CEST 2015


Thanks Francois.
Well, Paul wrote that "From that conversation it is evident you are using
Libav and not FFmpeg. And so we can not help you." and "From that
conversation it is evident you are using Libav and not FFmpeg. And so we
can not help you.".
The thing that makes me confused is that I have not installed any Libav
resources, but I have installed ffmpeg and janus using this script (which
is included in this conversation from which is somehow evident that I am
not using FFmpeg but Libav) on a fresh install of ubuntu 14.04.2 :

#!/bin/bash
> aptitude update
> aptitude -y full-upgrade
> aptitude -y install libmicrohttpd-dev libjansson-dev libnice-dev \
>     libssl-dev libsrtp-dev libsofia-sip-ua-dev libglib2.0-dev \
>     libopus-dev libogg-dev libini-config-dev libcollection-dev \
>     pkg-config gengetopt libtool automake checkinstall git yasm
>


cd
> git clone git://source.ffmpeg.org/ffmpeg
> cd ~/ffmpeg
> ./configure --enable-libopus
> make
> checkinstall -y --pkgversion="1.0.0"
>


cd
> git clone https://github.com/meetecho/janus-gateway.git
> cd ~/janus-gateway
> git checkout pprec-opus-libav
> sh autogen.sh
> ./configure --prefix=/opt/janus --enable-post-processing
> --disable-websockets --disable-data-channels --disable-rabbitmq
> --disable-docs
> make
> checkinstall -y --pkgversion="1.0.0"
> make configs


Moreover, sites:

http://trac.ffmpeg.org/wiki/Using%20libav*
https://www.ffmpeg.org/libavcodec.html
https://www.ffmpeg.org/libavformat.html

claims that FFmpeg developers are authors of FFmpeg included libavcodec and
libavformat libraries, and this libraries are part of the FFmpeg.
Name of this list stands as "libav-user - For questions about using the
FFmpeg libraries and API :  This list is about using libavcodec,
libavformat, libavutil, libavdevice and libavfilter."

To clarify - am I mailing the right list? I thought that I was using FFmpeg
API. If not, I could mail Libav mail lists also.


Concerning your suggestions - I added avcodec_register_all() to the code
before, but as it had not changed anything I haven't pushed that changes.
Sorry for not informing you about it.

As you can see in the install script, I compile FFmpeg with libopus
enabled, and FFmpeg general documentation (
https://www.ffmpeg.org/general.html) declares that ogg support is provided
out of the box.

I'll take a look atav_packet_rescale_ts() function, but before going to
that point, I would like to generate working .opus file using FFmpeg
libraries.

I'm wondering if ffmpeg .opus headers are created correctly in this case.
After not very elegant operation, which was manually replacing in vim
ffmpeg generated header by this generated by libogg, I got pretty different
results.

opusinfo output for file generated using ffmpeg libraries:

New logical stream (#1, serial: 550f772e): type unknown
>
Logical stream 1 ended


ffprobe output for file generated using ffmpeg libraries:

[ogg @ 0x3449c40] Codec not found
> audio_nolibogg.opus: End of file


opusinfo output for file generated using libogg:

New logical stream (#1, serial: 6b8b4567): type opus
> WARNING: Implausibly low preskip in Opus stream (1)
> Encoded with Janus post-processing
> WARNING: Sample count behind granule (35228160>35301120) in stream 1
> WARNING: Sample count behind granule (35281920>35374080) in stream 1
> [...]
> [~3.5k of warnings]
> [...]
> WARNING: Sample count behind granule (231806400>231929280) in stream 1
> WARNING: Sample count behind granule (231860160>231983040) in stream 1
> WARNING: EOS not set on stream 1 (normal for live streams)
> Opus stream 1:
> Pre-skip: 0
> Playback gain: 0 dB
> Channels: 2
> Original sample rate: 48000Hz
> Packet duration:   20.0ms (max),   20.0ms (avg),   20.0ms (min)
> Page duration:   1180.0ms (max), 1127.0ms (avg), 1000.0ms (min)
> Total data length: 18074102 bytes (overhead: 1.98%)
> Playback length: 80m:32.979s
> Average bitrate: 29.92 kb/s, w/o overhead: 29.33 kb/s


ffprobe output for file generated using libogg:

Input #0, ogg, from 'rec-2215547545-audio-libogg.opus':
>   Duration: 01:20:32.98, start: 0.000000, bitrate: 29 kb/s
>     Stream #0:0: Audio: opus, 48000 Hz, stereo, fltp



opusinfo output for file generated using ffmpeg libraries, but with header
manually force-replaced with libogg header:

WARNING: Hole in data (50 bytes) found at approximate offset 9000 bytes.
> Corrupted Ogg.
> WARNING: Hole in data (31 bytes) found at approximate offset 9000 bytes.
> Corrupted Ogg.
> [...]
> [~100 lines of warnings]
> [...]
> WARNING: Hole in data (608 bytes) found at approximate offset 22500 bytes.
> Corrupted Ogg.
> WARNING: Invalid header page, no packet found
> WARNING: Invalid header page in stream 1, contains multiple packets
> New logical stream (#1, serial: dabc9752): type invalid
> WARNING: stream start flag not set on stream 1
> Logical stream 1 ended


ffprobe output for file generated using ffmpeg libraries, but with header
manually force-replaced with libogg header:

rec-2215547545-audio-nolibogg.opus: Invalid data found when processing input



Despite replacing headers file is still not playable. (what is not really
surprising)


Best regards,

Mateusz











2015-07-08 21:46 GMT+02:00 Talgorn François-Xavier <
fxtalgorn-at-yahoo.fr at ffmpeg.org>:

> I agree with you Mateusz, FFMPEG makes use of libav. If I remember well,
> it is built on libav + proper extensions.
> It is true that FFMPEG does everything that libav does, and more, but that
> would be sectarian to say that this mailing list can not help you.
> Technically, we can.
>
>
>
>
> Le 8 juil. 2015 à 21:17, Mateusz Koslacz <mateusz.koslacz at 4vod.tv> a
> écrit :
>
> Well, so why list I'm mailing is called "Libav-user -- This list is about
> using libavcodec, libavformat, libavutil, libavdevice and libavfilter.", if
> you can't help me if I use Libav?
>
> 2015-07-08 19:26 GMT+02:00 Paul B Mahol <onemda at gmail.com>:
>
>>
>> Dana 8. 7. 2015. 15:05 osoba "Mateusz Koslacz" <mateusz.koslacz at 4vod.tv>
>> napisala je:
>>
>> >
>> > Hi,
>> >
>> > In our project we use janus-gateway (http://janus.conf.meetecho.com/)
>> as a webRTC gateway and also as a stream recorder. We are on the tests
>> stage of our project, and after very long development time we have
>> ecountered a bug that is a blocker for whole project. After real tests of
>> recording streams using janus we realized that audio and video are out of
>> sync in recordings, despite of fact, that live they are perfectly in sync.
>> >
>> > Janus records two *.mjr files for each recording - one for video, and
>> one for audio. Janus also provides own converter to convert this files to
>> *.webm for video and *.opus for audio. After that, we use ffmpeg to merge
>> this files. By recording stopwatch view on the stream we concluded, that
>> video has correct length and speed, so most probably this is something
>> wrong with audio recording or converting.
>> >
>> > Firstly, janus was using libogg for converting *.mjr audio to *.opus.
>> Regarding described issues author decided to switch to libav audio
>> processing. You can check how it's done in this file
>> https://github.com/meetecho/janus-gateway/blob/pprec-opus-libav/postprocessing/pp-opus.c starting
>> from 90 line.
>> >
>> > Returned data is a lil bit smaller than data obtained using libogg:
>> >
>> >> -rw-r--r-- 1 mateusz mateusz  17987445 lip  8 11:58
>> rec-2215547545-audio-nolibogg.opus
>> >> -rw-r--r-- 1 mateusz mateusz 221841174 lip  8 11:56
>> rec-2215547545-video.webm
>> >> -rw-r--r-- 1 mateusz mateusz  18074102 lip  8 11:52
>> rec-2215547545-audio-libogg.opus
>> >
>> >
>> > Unfortunately, returned data is somehow corrupted - ffprobe results for
>> libav processing output:
>> >
>> >> [ogg @ 0x4336540] Codec not found
>> >> rec-2215547545-audio-nolibogg.opus: End of file
>> >
>> >
>> > and for compare, for libogg version:
>> >
>> >> Input #0, ogg, from 'rec-2215547545-audio-libogg.opus':
>> >>   Duration: 01:20:32.98, start: 0.000000, bitrate: 29 kb/s
>> >>     Stream #0:0: Audio: opus, 48000 Hz, stereo, fltp
>> >
>> >
>> > Moreover, no player can play this file - VLC just does nothing, and
>> Rythmbox says "Can't play file: {null}".
>> >
>> >
>> > Is this because of improper use of libav api, or maybe it is some libav
>> bug? How could we possibly overcome this problems?
>> >
>> > For more details you can read our whole conversation with janus author
>> here:
>> > https://groups.google.com/forum/#!topic/meetecho-janus/lMCtBm7VbMY
>> >
>> >
>>
>> From that conversation it is evident you are using Libav and not FFmpeg.
>> And so we can not help you.
>>
>> > Regards,
>> >
>> > Mateusz Koślacz
>> >
>> > _______________________________________________
>> > Libav-user mailing list
>> > Libav-user at ffmpeg.org
>> > http://ffmpeg.org/mailman/listinfo/libav-user
>> >
>>
>> _______________________________________________
>> Libav-user mailing list
>> Libav-user at ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/libav-user
>>
>>
> _______________________________________________
> Libav-user mailing list
> Libav-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/libav-user
>
>
>
> _______________________________________________
> Libav-user mailing list
> Libav-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/libav-user
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20150709/7bdc5890/attachment.html>


More information about the Libav-user mailing list