
Recherche avancée
Autres articles (73)
-
Le profil des utilisateurs
12 avril 2011, parChaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...) -
Configurer la prise en compte des langues
15 novembre 2010, parAccéder à la configuration et ajouter des langues prises en compte
Afin de configurer la prise en compte de nouvelles langues, il est nécessaire de se rendre dans la partie "Administrer" du site.
De là, dans le menu de navigation, vous pouvez accéder à une partie "Gestion des langues" permettant d’activer la prise en compte de nouvelles langues.
Chaque nouvelle langue ajoutée reste désactivable tant qu’aucun objet n’est créé dans cette langue. Dans ce cas, elle devient grisée dans la configuration et (...) -
Sélection de projets utilisant MediaSPIP
29 avril 2011, parLes exemples cités ci-dessous sont des éléments représentatifs d’usages spécifiques de MediaSPIP pour certains projets.
Vous pensez avoir un site "remarquable" réalisé avec MediaSPIP ? Faites le nous savoir ici.
Ferme MediaSPIP @ Infini
L’Association Infini développe des activités d’accueil, de point d’accès internet, de formation, de conduite de projets innovants dans le domaine des Technologies de l’Information et de la Communication, et l’hébergement de sites. Elle joue en la matière un rôle unique (...)
Sur d’autres sites (10860)
-
Send sprop-parameter-sets inband rather than in SDP
21 janvier 2021, par MaxI am trying to use ffmpeg to stream an MP4 file over rtp. I am sending the stream to a SFU server that will broadcast the stream to users. The clients are expecting to receive an h264 video stream with profile-level-id
42e01f
. The issue I'm having is that the video received by the clients does not decode properly (just a black screen). If I transcode the video before sending, then everything works correctly. If I dump the SDP that describes what ffmpeg is sending, there is a distinct difference between the transcoded and non-transcoded version.

For the non-transcoded version, my ffmpeg command looks like


ffmpeg '-re' \
 '-v' \
 'info' \
 '-protocol_whitelist' \
 'pipe,tls,file,http,https,tcp,rtp' \
 '-i' \
 '-f' 'mp4' \
 'https://storage.googleapis.com/my_bucket/file' \
 '-map' \
 '0:v:0' \
 '-c:v' \
 'copy' \
 '-f' \
 'rtp' \
 '-sdp_file' 'out.sdp' \
 'rtp://142.93.14.110:40425?rtcpport=45155'



When I run this command, out.sdp contains the line


a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z0LAH9kAUAW7AWoCAgKAAAH0gABdwAeMGSQ=,aMuMsg==; profile-level-id=42C01F



However, if I change
-c:v copy
to-c:v libx264 -preset ultrafast
, then the sdp line changes toa=fmtp:96 packetization-mode=1;
. Given that there is no SDP exchange between ffmpeg and my SFU, I think the issue is that ffmpeg needs to be sending the sprops in-band rather than setting them in the sdp. Any help here would be amazing. The other possible issue is that the profile levels are sightly different.

-
h264_mp4toannexb : Don't forget numOfPictureParameterSets
14 décembre 2019, par Andreas Rheinhardth264_mp4toannexb : Don't forget numOfPictureParameterSets
The format of an AVCDecoderConfigurationRecord, the out-of-band
extradata of H.264 in mp4, is as follows : First four bytes containing
version, profile and level, one byte for the length size and one byte
each for the number of SPS, followed by the SPS (each with its own size
field), followed by a byte containing the number of PPS followed by the
PPS with their size fields. While the number of SPS/PPS may be zero, the
bytes containing these numbers are mandatory. Yet the byte containing
the number of PPS has been ignored in two places :
1. In the initial check for whether the extradata can contain an
AVCDecoderConfigurationRecord. The minimum size is 7, not 6.
2. No check is made for whether the extradata ended right after the last
byte of the last SPS of the SPS array. Instead the first byte of the
padding is read as if it were part of the extradata and contained the
number of PPS (namely zero, given that the padding is zeroed). No error
or warning was ever raised.
This has been changed. Such truncated extradata is now considered
invalid ; the check for 2. has been incorporated into the general size
check.Signed-off-by : Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Signed-off-by : Michael Niedermayer <michael@niedermayer.cc> -
Using ffmpeg dll's from a windows 32 bit app
8 avril 2020, par DerekI am trying to use ffmpeg via dll calls from a win32 app (compiled in clarion)



I transcoded the example file encode_video.c and that worked 100% however I was left with a .h264 file instead of a .mp4 file.



I then transcoded the example muxing.c however it crashes and I am at a loss for options.



Any help would be most appreciated.



Encode_mp4 ROUTINE
! avformat_alloc_output_context2 *******************************************************************************************
file_name = 'myvideo.mp4'
! Try guess format from filename
if CHECK_STACK then ds_SaveStack .
Result = avformat_alloc_output_context2(ThisPtrPtr, 0, NullCString, file_name);
if CHECK_STACK then ds_TestStack .
if Result < 0
 ds_OutputDebugString('avformat_alloc_output_context2 Try guess format failed, try mpeg', TRUE)
 CString1 = 'mpeg'
 if CHECK_STACK then ds_SaveStack .
 Result = avformat_alloc_output_context2(ThisPtrPtr, 0, CString1, file_name);
 if CHECK_STACK then ds_TestStack .
 if Result < 0
 ds_OutputDebugString('avformat_alloc_output_context2 failed', TRUE)
 stop('Could not allocate output format context')
 exit
 end
end
formater_ctxt &= (ThisPtrPtr)
!ds_OutputDebugString('formater_ctxt=' & address(formater_ctxt), TRUE)
assert(not(formater_ctxt &= NULL), 'Check AVFormatContext formater_ctxt')
do VerifyFormatContext
assert(formater_ctxt.oformat > 0, 'Check AVFormatContext formater_ctxt.oformat')
formater &= (formater_ctxt.oformat)
do VerifyFormat
ds_OutputDebugString('avformat_alloc_output_context2 OK', TRUE)

! avcodec_find_encoder *******************************************************************************************
if CHECK_STACK then ds_SaveStack .
encoder &= avcodec_find_encoder(formater.video_codec)
if CHECK_STACK then ds_TestStack .
if encoder &= NULL
 ds_OutputDebugString('avcodec_find_encoder failed', TRUE)
 stop('Could not find encoder')
 exit
end
do VerifyEncoder
ds_OutputDebugString('avcodec_find_encoder OK', TRUE)

! avformat_new_stream *******************************************************************************************
if CHECK_STACK then ds_SaveStack .
stream &= avformat_new_stream(formater_ctxt, encoder)
if CHECK_STACK then ds_TestStack .
if stream &= NULL 
 ds_OutputDebugString('avformat_new_stream failed', TRUE)
 stop('Could not create new stream')
 exit
end
do VerifyStream
stream.id = formater_ctxt.nb_streams-1
ds_OutputDebugString('avformat_new_stream OK', TRUE)

! avcodec_alloc_context3 *******************************************************************************************
if CHECK_STACK then ds_SaveStack .
encoder_ctxt &= avcodec_alloc_context3(encoder)
if CHECK_STACK then ds_TestStack .
if encoder_ctxt &= NULL 
 ds_OutputDebugString('avcodec_alloc_context3 failed', TRUE)
 stop('Could not allocate video codec context')
 exit
end
do VerifyEncoderContext
ds_OutputDebugString('avcodec_alloc_context3 OK', TRUE)

! Video settings *******************************************************************************************
do InitVideoSettings

assert(AV_CODEC_FLAG_GLOBAL_HEADER = bshift(1, 22), 'Check AV_CODEC_FLAG_GLOBAL_HEADER')
if band(formater.flags, AVFMT_GLOBALHEADER)
 encoder_ctxt.flags = bor(encoder_ctxt.flags, AV_CODEC_FLAG_GLOBAL_HEADER) !avctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
end

! avcodec_open2 *******************************************************************************************
if CHECK_STACK then ds_SaveStack .
Result = avcodec_open2(encoder_ctxt, encoder, 0)
if CHECK_STACK then ds_TestStack .
if Result < 0
 ds_OutputDebugString('avcodec_open2 failed. Result=' & Result, TRUE)
 stop('Could not open codec')
 exit
end
ds_OutputDebugString('avcodec_open2 OK', TRUE)

! av_frame_alloc *******************************************************************************************
if CHECK_STACK then ds_SaveStack .
frame &= av_frame_alloc();
if CHECK_STACK then ds_TestStack .
if frame &= NULL
 ds_OutputDebugString('av_frame_alloc failed', TRUE)
 stop('Could not allocate video frame')
 exit
end
do VerifyFrame
frame.format = encoder_ctxt.pix_fmt
frame.width = encoder_ctxt.width
frame.height = encoder_ctxt.height
ds_OutputDebugString('av_frame_alloc OK', TRUE)

! av_frame_get_buffer *******************************************************************************************
if CHECK_STACK then ds_SaveStack .
Result = av_frame_get_buffer(frame, 32)
if CHECK_STACK then ds_TestStack .
if Result < 0
 ds_OutputDebugString('av_frame_get_buffer failed', TRUE)
 stop('Could not allocate video frame buffer Error = ' & Result)
 exit
end
do VerifyFrameBuffer
ds_OutputDebugString('av_frame_get_buffer OK', TRUE)

!frame->data offset=0 Array[8] of *int8_t
UseData0 &= (frame.data[1])
UseData1 &= (frame.data[2])
UseData2 &= (frame.data[3])

if CHECK_STACK then ds_SaveStack .
Result = avcodec_parameters_from_context(stream.codecpar, encoder_ctxt);
if CHECK_STACK then ds_TestStack .
if Result < 0
 ds_OutputDebugString('avcodec_parameters_from_context failed', TRUE)
 stop('Could not initialize stream parameters')
 exit
end
ds_OutputDebugString('avcodec_parameters_from_context OK', TRUE)

! av_dump_format *******************************************************************************************
ds_OutputDebugString('before call to av_dump_format file_name=' & file_name, TRUE)
av_dump_format(formater_ctxt, 0, file_name, 1)




I get a crash at last line - call to av_dump_format()



If I comment this code then I get a crash on the very next lib call :



! avio_open *******************************************************************************************
if not(band(formater.flags, AVFMT_NOFILE)) 
 ds_OutputDebugString('before call to avio_open file_name=' & file_name, TRUE)
 ThisInt &= address(formater_ctxt.pb)
 Result = avio_open(ThisInt, file_name, AVIO_FLAG_WRITE)




Strangely if I comment the setup call to av_log_set_callback(my_log_callback) then the crash moves down to the next lib call : avformat_write_header