@scrypted/libav 1.0.140 → 1.0.141
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.ts +3 -1
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/src/formatcontext.cpp +65 -18
- package/src/index.ts +3 -1
package/lib/index.d.ts
CHANGED
|
@@ -95,7 +95,9 @@ export interface AVFormatContext {
|
|
|
95
95
|
receiveFrame(streamIndex: number, codecContext: AVCodecContext): Promise<AVFrame>;
|
|
96
96
|
create(format: string, callback: (buffer: Buffer) => void): void;
|
|
97
97
|
newStream(options: {
|
|
98
|
-
codecContext
|
|
98
|
+
codecContext?: AVCodecContext;
|
|
99
|
+
formatContext?: AVFormatContext;
|
|
100
|
+
streamIndex?: number;
|
|
99
101
|
}): number;
|
|
100
102
|
writeFrame(streamIndex: number, packet: AVPacket): void;
|
|
101
103
|
createSDP(): string;
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,4BAEC;AAOD,oCAEC;AAED,sCAEC;AAED,8BAKC;AAGD,0BAgCC;AAED,sCA2BC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/formatcontext.cpp
CHANGED
|
@@ -699,30 +699,77 @@ Napi::Value AVFormatContextObject::NewStream(const Napi::CallbackInfo &info)
|
|
|
699
699
|
Napi::Object options = info[0].As<Napi::Object>();
|
|
700
700
|
|
|
701
701
|
Napi::Value codecContextValue = options.Get("codecContext");
|
|
702
|
-
|
|
702
|
+
Napi::Value formatContextValue = options.Get("formatContext");
|
|
703
|
+
Napi::Value streamIndexValue = options.Get("streamIndex");
|
|
704
|
+
AVStream *stream;
|
|
705
|
+
|
|
706
|
+
if (codecContextValue.IsObject())
|
|
707
|
+
{
|
|
708
|
+
AVCodecContextObject *codecContextObject = Napi::ObjectWrap<AVCodecContextObject>::Unwrap(codecContextValue.As<Napi::Object>());
|
|
709
|
+
AVCodecContext *codecContext = codecContextObject->codecContext;
|
|
710
|
+
|
|
711
|
+
// Create a new stream
|
|
712
|
+
stream = avformat_new_stream(fmt_ctx_, NULL);
|
|
713
|
+
if (!stream)
|
|
714
|
+
{
|
|
715
|
+
Napi::Error::New(env, "Failed to create new stream").ThrowAsJavaScriptException();
|
|
716
|
+
return env.Undefined();
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
// Set the codec parameters for the new stream
|
|
720
|
+
AVCodecParameters *codecpar = stream->codecpar;
|
|
721
|
+
stream->time_base.num = codecContext->time_base.num;
|
|
722
|
+
stream->time_base.den = codecContext->time_base.den;
|
|
723
|
+
|
|
724
|
+
avcodec_parameters_from_context(codecpar, codecContext);
|
|
725
|
+
}
|
|
726
|
+
else if (formatContextValue.IsObject())
|
|
703
727
|
{
|
|
704
|
-
|
|
705
|
-
|
|
728
|
+
if (!streamIndexValue.IsNumber())
|
|
729
|
+
{
|
|
730
|
+
Napi::TypeError::New(env, "Number expected for streamIndex").ThrowAsJavaScriptException();
|
|
731
|
+
return env.Undefined();
|
|
732
|
+
}
|
|
733
|
+
unsigned int streamIndex = streamIndexValue.As<Napi::Number>().Uint32Value();
|
|
734
|
+
AVFormatContextObject *formatContextObject = Napi::ObjectWrap<AVFormatContextObject>::Unwrap(formatContextValue.As<Napi::Object>());
|
|
735
|
+
AVFormatContext *formatContext = formatContextObject->fmt_ctx_;
|
|
736
|
+
if (!formatContext)
|
|
737
|
+
{
|
|
738
|
+
Napi::Error::New(env, "Format context is null").ThrowAsJavaScriptException();
|
|
739
|
+
return env.Undefined();
|
|
740
|
+
}
|
|
741
|
+
if (streamIndex < 0 || streamIndex >= formatContext->nb_streams)
|
|
742
|
+
{
|
|
743
|
+
Napi::Error::New(env, "Invalid stream index").ThrowAsJavaScriptException();
|
|
744
|
+
return env.Undefined();
|
|
745
|
+
}
|
|
746
|
+
AVStream *sourceStream = formatContext->streams[streamIndex];
|
|
747
|
+
stream = avformat_new_stream(fmt_ctx_, NULL);
|
|
748
|
+
if (!stream)
|
|
749
|
+
{
|
|
750
|
+
Napi::Error::New(env, "Failed to create new stream").ThrowAsJavaScriptException();
|
|
751
|
+
return env.Undefined();
|
|
752
|
+
}
|
|
753
|
+
AVCodecParameters *codecpar = stream->codecpar;
|
|
754
|
+
if (avcodec_parameters_copy(codecpar, sourceStream->codecpar) < 0)
|
|
755
|
+
{
|
|
756
|
+
Napi::Error::New(env, "Failed to copy codec parameters").ThrowAsJavaScriptException();
|
|
757
|
+
return env.Undefined();
|
|
758
|
+
}
|
|
759
|
+
stream->time_base.num = sourceStream->time_base.num;
|
|
760
|
+
stream->time_base.den = sourceStream->time_base.den;
|
|
706
761
|
}
|
|
707
|
-
|
|
708
|
-
AVCodecContextObject *codecContextObject = Napi::ObjectWrap<AVCodecContextObject>::Unwrap(codecContextValue.As<Napi::Object>());
|
|
709
|
-
AVCodecContext *codecContext = codecContextObject->codecContext;
|
|
710
|
-
|
|
711
|
-
// Create a new stream
|
|
712
|
-
AVStream *stream = avformat_new_stream(fmt_ctx_, NULL);
|
|
713
|
-
if (!stream)
|
|
762
|
+
else if (streamIndexValue.IsNumber())
|
|
714
763
|
{
|
|
715
|
-
Napi::
|
|
764
|
+
int streamIndex = streamIndexValue.As<Napi::Number>().Int32Value();
|
|
765
|
+
stream = fmt_ctx_->streams[streamIndex];
|
|
766
|
+
}
|
|
767
|
+
else {
|
|
768
|
+
// throw
|
|
769
|
+
Napi::Error::New(env, "Object expected for codecContext or formatContext").ThrowAsJavaScriptException();
|
|
716
770
|
return env.Undefined();
|
|
717
771
|
}
|
|
718
772
|
|
|
719
|
-
// Set the codec parameters for the new stream
|
|
720
|
-
AVCodecParameters *codecpar = stream->codecpar;
|
|
721
|
-
stream->time_base.num = codecContext->time_base.num;
|
|
722
|
-
stream->time_base.den = codecContext->time_base.den;
|
|
723
|
-
|
|
724
|
-
avcodec_parameters_from_context(codecpar, codecContext);
|
|
725
|
-
|
|
726
773
|
// gpt says supposed to send this but sends empty packet which crashes.
|
|
727
774
|
// sps/pps seem to be sent correctly though.
|
|
728
775
|
// may be an issue on mp4 where there's a moov header?
|
package/src/index.ts
CHANGED
|
@@ -200,7 +200,9 @@ export interface AVFormatContext {
|
|
|
200
200
|
receiveFrame(streamIndex: number, codecContext: AVCodecContext): Promise<AVFrame>;
|
|
201
201
|
create(format: string, callback: (buffer: Buffer) => void): void;
|
|
202
202
|
newStream(options: {
|
|
203
|
-
codecContext
|
|
203
|
+
codecContext?: AVCodecContext,
|
|
204
|
+
formatContext?: AVFormatContext,
|
|
205
|
+
streamIndex?: number,
|
|
204
206
|
}): number;
|
|
205
207
|
writeFrame(streamIndex: number, packet: AVPacket): void;
|
|
206
208
|
createSDP(): string;
|